繁体   English   中英

熊猫绘制“分组依据”结果的子图

[英]Pandas plot subplots of a 'group by' result

当我尝试按操作按组获取层级索引上的条形图时,我对我(差)的Pandas知识感到困惑。

我的数据看起来像这样

id, val, cat1, cat2

然后创建一个层次索引:

df_group = df_len.groupby(['cat1','cat2'])

我想为每个cat1对象获取一份hbar图 ,其中列出了所有cat2对象,其中列出了其中所有cat1对象的值。

我的方法均无效:

  • df_group.plot(...)
  • for name, group in df_group: .... group.plot(...)
  • df_group.xs(...)实验

结果应该看起来像这样一个 在此处输入图片说明

我想我只是不了解pandasmatplotlib ,... -internals的知识,绘制几百个项目并不难(cat2 <10,cat1 = 30)

我建议使用seaborn进行此类多面图绘制。 在matplotlib中执行此操作非常棘手,因为该库的级别很低。 Seaborn在此用例方面表现出色。

好的,这就是我终于解决的方法:

dfc = df_len.groupby(['cat1','cat2']).count().reset_index()
dfp=dfc.pivot(index="cat1",columns="cat2")
dfp.columns = dfp.columns.get_level_values(1)
dfp.plot(kind='bar', figsize=(15, 5), stacked=True);

简而言之:我使用数据透视表转置矩阵,然后能够自动绘制单个cols,在此处的示例2中

matplotlib不是那么棘手,请参阅:

In [54]:

print df
  cat1  cat2       val
0    A     1  0.011887
1    A     2  0.880121
2    A     3  0.034244
3    A     4  0.530230
4    B     1  0.510812
5    B     2  0.405322
6    B     3  0.406259
7    B     4  0.406405
In [55]:

col_list = ['r', 'g']
ax = plt.subplot(111)
for (idx, (grp, val)) in enumerate(df.groupby('cat1')):
    ax.bar(val.cat2+0.25*idx-0.25, 
           val.val, width=0.25,  
           color=col_list[idx], 
           label=grp)
plt.legend()

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM