2014-09-29 62 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