繁体   English   中英

如何绘制从Pandas DataFrame开始的堆积时间直方图?

[英]How to plot stacked time histogram starting from a Pandas DataFrame?

考虑以下DataFrame df

Date                   Kind
2018-09-01 13:15:32    Red
2018-09-02 16:13:26    Blue
2018-09-04 22:10:09    Blue
2018-09-04 09:55:30    Red
...                    ...

其中有一列具有datetime64[ns] np.object ,另一列包含一个np.object ,该对象只能采用有限数量的值(在本例中为2)。

您必须绘制一个日期直方图,其中:

  • 在x轴上,日期(每天的直方图显示月份和日期);
  • 在y轴上,属于该日期的项目数,以堆叠的条形显示蓝色和红色之间的差异。

使用Matplotlib如何做到这一点?

我当时想做一个set_index并重新采样如下:

df.set_index('Date', inplace=True)
df.resample('1d').count()

但是我丢失了有关每种商品数量的信息。 我也想将任何缺席的日子保持为零。

任何帮助非常感谢。

使用groupbycountunstack调整数据帧:

df2 = df.groupby(['Date', 'Kind'])['Kind'].count().unstack('Kind').fillna(0)

接下来,重新采样数据框并求和每一天的计数。 这还将添加未在数据框(指定)中的所有缺失日期。 然后调整索引以仅保留日期部分。

df2 = df2.resample('D').sum()
df2.index = df2.index.date    

现在绘制带有stacked=True的数据框:

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

在此处输入图片说明


或者,可以将plt.bar()函数用于最终绘图:

cols = df['Kind'].unique() # Find all original values in the column 
ind = range(len(df2))

p1 = plt.bar(ind, df2[cols[0]])
p2 = plt.bar(ind, df2[cols[1]], bottom=df2[cols[0]])

在这里,必须将每个部分的bottom参数设置为之前所有部分的总和。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM