为 Python 中多个日期的多个类别绘制堆积 (100%) 条形图

Plot stacked (100%) bar chart for multiple categories on multiple dates in Python

我有以下初始数据框:

Post 身份证 Submission_Date 天赋
0 第 1 行 01.12.2020
1 行 2 2020 年 12 月 3 日 讨论
2 第 3 行 2020 年 12 月 3 日 新闻
3 第 4 行 2020 年 12 月 3 日 讨论
4 第5行 2020 年 12 月 6 日 尽职调查
5 第 6 行 2020 年 12 月 7 日 讨论
6 第 7 行 2020 年 12 月 31 日 讨论
1 第 8 行 2021 年 1 月 1 日 对冲基金的眼泪

我将数据框分组为:

import pandas as pd
import numpy as np  # for test data

data = {'Post ID': ['row1', 'row2', 'row3', 'row4', 'row5', 'row6', 'row7', 'row8'], 'Submission_Date': ['01.12.2020', '03.12.2020', '03.12.2020', '03.12.2020', '06.12.2020', '07.12.2020', '31.12.2020', '01.01.2021'], 'Flair': [np.nan, 'Discussion', 'News', 'Discussion', 'Due Diligence', 'Discussion', 'Discussion', 'Hedge Fund Tears']}
df = pd.DataFrame(data)

df['Submission_Date'] = pd.to_datetime(df['Submission_Date'], format = "%Y-%m-%d %H:%M:%S").dt.strftime('%Y-%m-%d') 

df = df.groupby('Submission_Date')['Flair'].value_counts(normalize=True).unstack()

结果是这样的:

我想用“空”条填充日期并像这样绘制

something like this:

我已经试过了:

fig, ax = plt.subplots(figsize=(20,10))
df.plot(kind='bar',ax=ax, stacked=True, width=1)
plt.xlabel('Submission_Date', fontsize=16)
plt.ylabel('Ratio of Flairs used', fontsize=16)

但日期不正确,因为没有显示空天

假设此输入为 df2groupby 操作的输出):

Flair            Discussion  Due Diligence  Hedge Fund Tears      News
Submission_Date                                                       
01.01.2021              NaN            NaN               1.0       NaN
03.12.2020         0.666667            NaN               NaN  0.333333
06.12.2020              NaN            1.0               NaN       NaN
07.12.2020         1.000000            NaN               NaN       NaN
31.12.2020         1.000000            NaN               NaN       NaN

您可以 reindex 来自 pd.date_range:

df2.index = pd.to_datetime(df2.index, format='%d.%m.%Y')
df2 = df2.reindex(pd.date_range(df2.index.min(), df2.index.max()))
df2.index = df2.index.strftime('%Y-%m-%d') 
Flair       Discussion  Due Diligence  Hedge Fund Tears      News
2020-12-03    0.666667            NaN               NaN  0.333333
2020-12-04         NaN            NaN               NaN       NaN
2020-12-05         NaN            NaN               NaN       NaN
2020-12-06         NaN            1.0               NaN       NaN
2020-12-07    1.000000            NaN               NaN       NaN
...
2020-12-30         NaN            NaN               NaN       NaN
2020-12-31    1.000000            NaN               NaN       NaN
2021-01-01         NaN            NaN               1.0       NaN

图形结果(小尺寸):