熊猫数据框分组图
Posted
技术标签:
【中文标题】熊猫数据框分组图【英文标题】:Pandas dataframe groupby plot 【发布时间】:2017-05-20 13:56:52 【问题描述】:我有一个结构如下的数据框:
Date ticker adj_close
0 2016-11-21 AAPL 111.730
1 2016-11-22 AAPL 111.800
2 2016-11-23 AAPL 111.230
3 2016-11-25 AAPL 111.790
4 2016-11-28 AAPL 111.570
...
8 2016-11-21 ACN 119.680
9 2016-11-22 ACN 119.480
10 2016-11-23 ACN 119.820
11 2016-11-25 ACN 120.740
...
如何根据 adj_close
与 Date
的代码进行绘图?
【问题讨论】:
【参考方案1】:简单的情节,
你可以使用:
df.plot(x='Date',y='adj_close')
或者你可以预先设置索引为Date
,这样就很容易绘制出你想要的列了:
df.set_index('Date', inplace=True)
df['adj_close'].plot()
如果您想要一张带有ticker
的系列的图表
之前需要groupby:
df.set_index('Date', inplace=True)
df.groupby('ticker')['adj_close'].plot(legend=True)
如果您想要一个带有单独子图的图表:
grouped = df.groupby('ticker')
ncols=2
nrows = int(np.ceil(grouped.ngroups/ncols))
fig, axes = plt.subplots(nrows=nrows, ncols=ncols, figsize=(12,4), sharey=True)
for (key, ax) in zip(grouped.groups.keys(), axes.flatten()):
grouped.get_group(key).plot(ax=ax)
ax.legend()
plt.show()
【讨论】:
感谢您的回答。但这不是我想要的。我已经有了。但是,如果一个面板对应于 adj_close 与日期的代码,我该如何制作每个面板? 我添加了另一个选项来绘制不同的子图以防万一。 对于子图,sharey=True
似乎无法正常工作。【参考方案2】:
与上面朱利安的回答类似,我在以下方面取得了成功:
fig, ax = plt.subplots(figsize=(10,4))
for key, grp in df.groupby(['ticker']):
ax.plot(grp['Date'], grp['adj_close'], label=key)
ax.legend()
plt.show()
如果您想在 matlab 中进行更多控制,此解决方案可能更相关。
解决方案灵感来自:https://***.com/a/52526454/10521959
【讨论】:
嗨,我发现这个解决方案非常有用!但是,当我试图为每个 x 轴标签并排绘制“条”时。您的上面为标签绘制了一个具有不同颜色的条...有没有一种优雅的方法可以为标签中的每个值并排绘制条? 不确定我是否关注@AlexWalton,您能进一步解释一下吗? 正是我想要的,因为图例是 groupby 列 @YaakovBressler 没关系,我将它与 seaborn 和 hue 一起使用,效果很好!以上是关于熊猫数据框分组图的主要内容,如果未能解决你的问题,请参考以下文章