我正在尝试使用以下代码创建分组值的堆叠直方图:
titanic.groupby('Survived').Age.hist(stacked=True)
但我得到的这个直方图没有叠条。
如何在不必直接使用matplotlib或迭代群组的情况下将柱状图的条形图堆叠起来?
使用的数据集:https://www.udacity.com/api/nodes/5454512672/supplemental_media/titanic-datacsv/download
答案 0 :(得分:9)
到目前为止,我发现的最佳方法是使用组创建一个新的数据框:
pd.DataFrame({'Non-Survivors': titanic.groupby('Survived').get_group(0).Age,
'Survivors': titanic.groupby('Survived').get_group(1).Age})
.plot.hist(stacked=True)
答案 1 :(得分:4)
我定义了一个利用np.histogram
的自定义函数
另请注意,直方图组是在'Survived'
def hist(x):
h, e = np.histogram(x.dropna(), range=(0, 80))
e = e.astype(int)
return pd.Series(h, zip(e[:-1], e[1:]))
kw = dict(stacked=True, width=1, rot=45)
titanic.groupby('Survived').Age.apply(hist).unstack(0).plot.bar(**kw)
答案 2 :(得分:3)
此解决方案使用条形图而不是直方图,但我认为它可以为您提供所需的内容。
titanic.groupby(['Survived', pd.cut(titanic['Age'], np.arange(0,100,10))])\
.size()\
.unstack(0)\
.plot.bar(stacked=True)
答案 3 :(得分:2)