从数据框中绘制细分条形图

Plotting subdivided bar graph from a dataframe

我有一个数据框,如下所示

df = pd.DataFrame(
{
    'Dates': ['2021-04-11', '2021-06-08', '2021-06-08', '2021-06-09', '2021-06-10', '2021-07-18', '2021-07-18'], 
    'Results': ['Negative', 'Invalid', 'Negative','Negative','Negative', 'Negative', 'Positive' ], 
    'Size': [1, 1, 1, 1, 4, 21, 2]
    
})

我想绘制一个细分的条形图,如下图所示。 [![在此处输入图片描述][1]][1]

我已经坚持了一段时间了。尝试使用 groupby()、sum()、size() 等,但无法计算。

非常感谢任何帮助。

谢谢。 [1]: https://i.stack.imgur.com/HrKRY.jpg

只需通过在日期和结果上设置索引来重塑它,然后取消堆叠 Results。之后,情节。

df.set_index(['Dates', 'Results']).sort_index(0).unstack().plot.bar(stacked=True)

如果您不想使用列多索引,而是想要“无效”、“负”、“正”,只需从 unstack 创建一个中间数据框(我'我将调用它 temp) 并分配 temp.columns = temp.columns.get_level_values(1)。然后调用 temp.plot.bar(stacked=True).


要使用 OOP matplotlib 接口指定大小:

f, ax = plt.subplots(figsize=(HEIGHT, WIDTH))
temp.plot.bar(ax=ax, stacked=True)

使用 f.savefig(PATH) 将图形保存到文件。