【发布时间】:2017-06-08 06:10:27
【问题描述】:
我如何根据多索引的一个级别从多索引熊猫数据帧中进行多重绘图?
我有一个模型在不同场景中使用不同技术的结果,结果可能如下所示:
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)
基于this response,我离我想要的更近了。
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 的参数)。另一个问题是我想使用堆积条形图,这需要相当多的extra tweaks。我有机会用 Matplotlib 做类似的事情吗?
【问题讨论】:
-
如果您以这种方式导入 seaborn,则可以在没有 seaborn 样式的情况下使用 seaborn 绘图函数:
import seaborn.apionly as sns
标签: python pandas matplotlib multi-index subplot