簡體   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