在pandas中制作堆叠柱状图
我想根据下面的数据框创建一个堆叠条形图:
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_LCC
和 RECL_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)
但是,我得到的图是这样的:

有没有什么办法可以解决这个问题?我觉得我在 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()
... 得到的结果是:
... 我觉得这就是大家想要的结果。