来自Pandas的两个不同来源的堆积条形图

时间:2012-12-20 23:41:03

标签: python matplotlib pandas

我认为这很容易,但我试了一会儿得到一个没有太大成功的答案。我想为两个类别生成堆积条形图,但我在两个不同的日期框架中有这样的信息:

这是代码:

first_babies = live[live.birthord == 1] # first dataframe
others = live[live.birthord != 1] # second dataframe

fig = figure()
ax1 = fig.add_subplot(1,1,1)

first_babies.groupby(by=['prglength']).size().plot(
                     kind='bar', ax=ax1, label='first babies') # first plot
others.groupby(by=['prglength']).size().plot(kind='bar', ax=ax1, color='r',
               label='others') #second plot
ax1.legend(loc='best')
ax1.set_xlabel('weeks')
ax1.set_ylabel('frequency')
ax1.set_title('Histogram')

enter image description here

但是我想要这样的东西或者我所说的叠加条形图以便更好地区分类别:

enter image description here

我无法使用stacked=True,因为它无法使用两个不同的图表,我无法创建新的数据框,因为first_babiesothers不具有相同的元素数量。

由于

1 个答案:

答案 0 :(得分:1)

首先创建一个新列来区分first_babies:

live['first_babies'] = live['birthord'].lambda(x: 'first_babies' if x==1 else 'others')

你可以unstack groupby:

grouped = live.groupby(by=['prglength', 'first_babies']).size()
unstacked_count = grouped.size().unstack()

现在您可以直接绘制stacked bar-plot

unstacked_count.plot(kind='bar', stacked=True)