2014-09-29 23 views
1

我试图通过操作小组获得条形图指数,我与我的(贫穷的)大熊猫知识斗争。熊猫根据'结果'绘制的小区图

我的数据是这样的

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(...)实验

结果应该看起来有点像这样的 enter image description here

我想我只是缺乏pandasmatplotlib,... -internals知识的,它并不难积数100个项目(CAT2 < 10,CAT1 = 30)

回答

2

我建议使用seaborn来做这种类型的分面图。在matplotlib中做它是非常棘手的,因为图书馆的水平很低。 Seaborn擅长此用例。

+0

我试过seaborn,但在我的情况下没有任何运气。但它似乎是一个更好的暗淡的数据:) – MaM 2014-10-06 15:33:25

1

不在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() 

enter image description here

+0

好主意,但我最终用纯大熊猫解决它,并避免了matplot技巧。但无论如何,感谢您的帮助! – MaM 2014-10-06 15:34:51

2

好球员,所以这里是我如何解决它最后:

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); 

总之:我用了一个支点表来转置我的矩阵,然后我可以自动绘制单线,在example 2 here