簡體   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