如何在matplotlib中创建堆叠条形图,其中堆叠因条形图而异?

2024-09-24 22:33:08 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个熊猫数据帧,看起来像这样:

       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中绘制图形的一种非常低效的方法

有人能给点建议吗


Tags: 数据高度matplotlib颜色国家yearcountry基础
1条回答
网友
1楼 · 发布于 2024-09-24 22:33:08

你需要先转换你的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

相关问题 更多 >