在pandas中制作堆叠柱状图

8 投票
1 回答
15587 浏览
提问于 2025-04-30 23:07

我想根据下面的数据框创建一个堆叠条形图:

   VALUE     COUNT  RECL_LCC  RECL_PI
0      1  15686114         3        1
1      2  27537963         1        1
2      3  23448904         1        2
3      4   1213184         1        3
4      5  14185448         3        2
5      6  13064600         3        3
6      7  27043180         2        2
7      8  11732405         2        1
8      9  14773871         2        3

这个图会有两根条形。一根是针对 RECL_LCC 的,另一根是针对 RECL_PI 的。每根条形会分成三个部分,分别对应 RECL_LCCRECL_PI 中的唯一值,也就是 1、2、3,并且每个部分的高度是 COUNT 的总和。目前我做出来的效果是这样的:

df = df.convert_objects(convert_numeric=True)    
sub_df = df.groupby(['RECL_LCC','RECL_PI'])['COUNT'].sum().unstack()
sub_df.plot(kind='bar',stacked=True)

但是,我得到的图是这样的:

enter image description here

有没有什么办法可以解决这个问题?我觉得我在 groupby 的使用上出了点问题,但不太确定该怎么做。

暂无标签

1 个回答

8

我把数据放在了 stackpandas.dat 这个文件里。根据这些数据:

from pandas import *
import matplotlib.pyplot as plt

df = read_table("stackpandas.dat"," +",engine='python')

df = df.convert_objects(convert_numeric=True)
sub_df1 = df.groupby(['RECL_LCC'])['COUNT'].sum()
sub_df2 = df.groupby(['RECL_PI'])['COUNT'].sum()
sub_df = concat([sub_df1,sub_df2],keys=["RECL_LCC","RECL_PI"]).unstack()
sub_df.plot(kind='bar',stacked=True,rot=1)
plt.show()

... 得到的结果是: 这里插入图片描述

... 我觉得这就是大家想要的结果。

撰写回答