所以我有一个看起来像这样的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中绘制图形的一种极其低效的方法。
任何人都可以提出一些建议吗?
答案 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()
结果: