如何在matplotlib中创建堆叠的条形图,其中堆叠的条形图会有所不同?

时间:2019-11-08 23:59:31

标签: python pandas matplotlib

所以我有一个看起来像这样的pandas DataFrame:

       year country  total
0  2010     USA     10
1  2010    CHIN     12
2  2011     USA      8
3  2011    JAPN     12
4  2012    KORR      7
5  2012     USA     10
6  2013    CHIN      9
7  2013     USA     13

我想在matplotlib中创建一个堆积的条形图,其中每年有一个条形图,并且在那一年中这两个国家的堆积条形图都基于total列。颜色应基于国家/地区并在图例中表示。

我似乎无法弄清楚如何做到这一点。我想我可以使用遍历每年和每个国家的for循环来做到这一点,然后用对应于字典中值的颜色构造条形图。但是,这将为每个单独的条创建单独的图例条目,以使图例中总共有8个值。据我所知,这也是在matplotlib中绘制图形的一种极其低效的方法。

任何人都可以提出一些建议吗?

1 个答案:

答案 0 :(得分:0)

您需要先转换df。可以通过以下方式完成:

df = pd.DataFrame({'year': {0: 2010, 1: 2010, 2: 2011, 3: 2011, 4: 2012, 5: 2012, 6: 2013, 7: 2013},
                   'country': {0: 'USA', 1: 'CHIN', 2: 'USA', 3: 'JAPN', 4: 'KORR', 5: 'USA', 6: 'CHIN', 7: 'USA'},
                   'total': {0: 10, 1: 12, 2: 8, 3: 12, 4: 7, 5: 10, 6: 9, 7: 13}})

df2 = df.groupby(['year',"country"])['total'].sum().unstack("country")
print (df2)

#
country  CHIN  JAPN  KORR   USA
year                           
2010     12.0   NaN   NaN  10.0
2011      NaN  12.0   NaN   8.0
2012      NaN   NaN   7.0  10.0
2013      9.0   NaN   NaN  13.0
#

ax = df2.plot(kind='bar', stacked=True)

plt.show()

结果:

enter image description here

相关问题