Matplotlib-创建堆积条形图

时间:2017-11-22 20:05:33

标签: python pandas dataframe matplotlib

我有一个pandas数据框,其中包含多个国家/地区中多个人的数据。我要做的就是为每个人创建一个堆积的条形图,按国家/地区分隔。

我的数据是什么样的:

 person   country    sector     ex_sector  
 jim      US             0.25   0.3333333  
 tim      US        0.3333333         0.2  
 john     US              0.9         0.9  
 tom      US              0.2        0.25  
 jim      UK             0.25   0.3333333  
 tim      UK        0.3333333         0.4  
 john     UK              0.1         0.1  
 tom      UK              0.4        0.25  
 jim      JP              0.5   0.3333333  
 tim      JP        0.3333333         0.4  
 john     JP                0           0  
 tom      JP              0.4         0.5  

所以我知道如果我只是做jimchart = df.loc[df['person'] == 'jim']我可以得到:

 person   country   sector   ex_sector  
 jim      US          0.25   0.3333333  
 jim      UK          0.25   0.3333333  
 jim      JP           0.5   0.3333333  

这就是最终目标应该是:

enter image description here

最有效的方法是什么?当我尝试绘制扇区列时,它只是将每个国家/地区绘制在自己的栏上并且不会叠加它们。

从其他文档来看,似乎我必须转动我的表,以便每个国家都有自己的列 - 这将使我的表格更广泛(我使用的例子,我的真实df有10个国家)。感谢帮助!

1 个答案:

答案 0 :(得分:0)

IIUC:

In [61]: df.groupby('country')[['sector','ex_sector']].sum().T
Out[61]:
country          JP        UK        US
sector     1.233333  1.083333  1.683333
ex_sector  1.233333  1.083333  1.683333

In [62]: df.groupby('country')[['sector','ex_sector']].sum().T.plot.bar(stacked=True, rot=0)

enter image description here