用多个系列和误差线制作折线图

2024-09-28 01:28:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望创建一个线图,显示每年开花和结果时间(物候期)的变化。对于每个物候期,我想画出一年中的平均日数,如果可能的话,将每年的最小值和最大值显示为误差条。我把我需要的所有数据都过滤到几个数据帧中,以一种合理的方式将它们组合起来,但我不知道如何将它们全部绘制出来。以下是我所在位置的屏幕抓图:Imgur

我发现的所有添加误差线的例子都是基于公式或其他相等的数值,但在我的例子中,最大值/最小值会有所不同,所以我不确定如何整合。是否可以只创建一个列的数据列表并将其输入绘图?我现在在玩这个,但还没走多远。在

另外,如果有人对如何更好地呈现这些数据有什么总体建议,我会洗耳恭听。我研究过甘特图,但没有深入研究,因为仅仅使用matplotlib,这似乎有点直截了当。如果有人认为有帮助的话,我很乐意把演示数据或笔记本的其他部分放上去。在

编辑:以下是一些示例数据和我笔记本上的代码:Gist

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
%matplotlib inline
pd.set_option('display.max_columns', 40)
tick_spacing = 1

dfClean = df[['Site_Cluster', 'Species', 'Phenophase_Name', 
              'Phenophase_Status', 'Observation_Year', 'Day_of_Year']]
dfClean = dfClean[dfClean.Phenophase_Status == 1]

PhenoNames = ['Open flowers', 'Ripe fruits']
dfLakes = dfClean[(dfClean.Phenophase_Name.isin(PhenoNames)) 
                  & (dfClean.Site_Cluster == 'Lakes')
                 & (dfClean.Species == 'lapponica')]
dfLakesGrouped = dfLakes.groupby(['Observation_Year', 'Phenophase_Name'])
dfLakesReady = dfLakesGrouped.Day_of_Year.agg([np.min, np.mean, np.max]).round(0)
dfLakesReady = dfLakesReady.unstack()

print(dfLakesReady['mean'].plot())

Tags: 数据nameimportmatplotlibasnp笔记本year
1条回答
网友
1楼 · 发布于 2024-09-28 01:28:43

另一个答案是:

from pandas import DataFrame, date_range, Timedelta
import numpy as np
from matplotlib import pyplot as plt

rng = date_range(start='2015-01-01', periods=5, freq='24H')
df = DataFrame({'y':np.random.normal(size=len(rng))}, index=rng)
y1 = df['y']
y2 = (y1*3)
sd1 = (y1*2)
sd2 = (y1*2)

fig,(ax1,ax2) = plt.subplots(2,1,sharex=True)

_ = y1.plot(yerr=sd1, ax=ax1)
_ = y2.plot(yerr=sd2, ax=ax2)

输出:

enter image description here

相关问题 更多 >

    热门问题