[英]subplots from a multiindex pandas dataframe grouped by level
我如何基於多索引的一個級別從多索引的pandas DataFrame中做多個繪圖?
我有一個模型的結果,在不同的場景中使用不同的技術,結果可能如下所示:
import numpy as np
import pandas as pd
df=pd.DataFrame(abs(np.random.randn(12,4)),columns=[2011,2012,2013,2014])
df['scenario']=['s1','s1','s1','s2','s2','s3','s3','s3','s3','s4','s4','s4']
df['technology'=['t1','t2','t5','t2','t6','t1','t3','t4','t5','t1','t3','t4']
dfg=df.groupby(['scenario','technology']).sum().transpose()
dfg將擁有每年針對每種方案使用的技術。 我想為每個分享圖例的場景設一個子圖。
如果我只是使用參數subplots = True,那么它會繪制所有可能的組合(12個子圖)
dfg.plot(kind='bar',stacked=True,subplots=True)
基於這種反應,我更接近我所尋找的。
f,a=plt.subplots(2,2)
fig1=dfg['s1'].plot(kind='bar',ax=a[0,0])
fig2=dfg['s2'].plot(kind='bar',ax=a[0,1])
fig2=dfg['s3'].plot(kind='bar',ax=a[1,0])
fig2=dfg['s3'].plot(kind='bar',ax=a[1,1])
plt.tight_layout()
但結果並不理想,每個子情節都有不同的傳說......這使得它很難閱讀。 必須有一種更簡單的方法從多索引的數據幀中進行子圖...謝謝!
EDIT1:Ted Petrou使用seaborn factorplot提出了一個很好的解決方案,但我有兩個問題。 我已經定義了一個樣式,我寧願不使用seaborn樣式(一個解決方案可以改變seaborn的參數)。 另一個問題是我想使用堆積條形圖,這需要相當多的額外調整 。 我可以用Matplotlib做類似的事嗎?
在我看來,當您整理數據時,更容易進行數據分析 - 使每列代表一個變量。 在這里,您有不同列中的所有4年。 Pandas有一個功能和一種方法可以從寬(雜亂)數據中生成長(整潔)數據。 您可以使用df.stack
或pd.melt(df)
來整理數據。 然后你可以利用優秀的seaborn庫,它希望整潔的數據能夠輕松地繪制你想要的任何東西。
df1 = pd.melt(df, id_vars=['scenario', 'technology'], var_name='year')
print(df1.head())
scenario technology year value
0 s1 t1 2011 0.406830
1 s1 t2 2011 0.495418
2 s1 t5 2011 0.116925
3 s2 t2 2011 0.904891
4 s2 t6 2011 0.525101
import seaborn as sns
sns.factorplot(x='year', y='value', hue='technology',
col='scenario', data=df1, kind='bar', col_wrap=2,
sharey=False)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.