[英]plotting time series grouped by hour and day of week
我有一年多的每小时时间序列数据,并希望绘制一周中每一天的平均每小时测量值。 我运行了以下代码,我的数据采用以下格式(我之前为一周中的几天创建了列)。
df = df.groupby([df['date_UTC'].dt.hour, df['w_day']]).pm2_5_ugm3.mean().reset_index().dropna()
date_UTC w_day pm2_5_ugm3
0 0 Friday 11.868802
1 0 Monday 12.741524
2 0 Saturday 13.346273
3 0 Sunday 13.093804
4 0 Thursday 14.525096
... ... ... ...
163 23 Saturday 12.836788
164 23 Sunday 12.712683
165 23 Thursday 12.046935
166 23 Tuesday 12.043133
167 23 Wednesday 14.164027
我最终想要一个看起来像下面的图,但我不确定如何使用 seaborn/matplotlib 来绘制它。
更新:
我使用了@Arnold Vialfont 的建议,它基本上让我得到了我正在寻找的结果,但是当我引入色调时,facetplot 似乎不允许我绘制图例。 然后我使用了因子图,但是这个图似乎不能产生线图,这正是我需要的。 有没有办法使用因子图并让色调产生图例?
col_order=["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]
sns.set_style("white")
ax = sns.FacetGrid(df, col="w_day", col_wrap=7, height=6, col_order=col_order, hue ='Zone')
ax.map(sns.lineplot, "date_UTC", "pm2_5_ugm3")
色调不产生传奇
在这里使用 factorplot 我有一个图例,但无法根据需要生成线图。
ax = sns.catplot(x="date_UTC", y="pm2_5_ugm3", col="w_day", hue = 'Zone',
data=df, ci=None, aspect=.6)
您可以通过以下方式使用seaborn
,其中col_wrap
允许选择每行的图形数量:
g = sns.FacetGrid(df, col="w_day", col_wrap=7, height=4)
h.map(sns.lineplot, "date_UTC", "pm2_5_ugm3")
请注意,与您所说的最终想要的相比,将有一条曲线。
在做了更多研究之后,似乎实现我想要的最好方法是使用 Seaborn 的 relplot,因为它结合了 lineplot 和 facetgrid。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.