【问题标题】:Plotting subdivided bar graph from a dataframe从数据框中绘制细分条形图
【发布时间】:2021-09-29 03:14:31
【问题描述】:

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

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

【问题讨论】:

  • 这能回答你的问题吗? Pandas - Plotting a stacked Bar Chart
  • @ifly6 它没有。在那里,数据被分成列,在我的情况下,数据存在于单个列中,并且也是分类的。虽然它不能解决我的问题,但我会尝试从中得到这个想法。
  • 索引结果然后取消堆叠。噗,您将数据分成列。它甚至在答案中:df.groupby(['Name', 'Abuse/NFF'])['Name'].count().unstack('Abuse/NFF')
  • @ifly6 在我的数据框中,我需要“大小”列,它给出了当天发生的每个结果的计数。所以,我不能使用上面给出的 count() 函数
  • 是的,所以不要写 exact 相同的代码,修改那里的代码,设置索引和 unstack

标签: pandas dataframe plot bar-chart graph-visualization


【解决方案1】:

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

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

如果您不希望它带有多索引列,而是想要“无效”、“负”、“正”,只需从 unstack 创建一个中间数据框(我将其称为 @ 987654326@) 并分配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)将图形保存到文件。

【讨论】:

  • 感谢您的详细解释。我现在明白了。还有一件事,有没有办法增加显示的图表的大小?显示的图表有许多日期,并且默认大小是狭窄的。谢谢。
  • 查看编辑。 tl;博士是用figsize设置图形大小。
  • 非常感谢。我对图表很陌生,因此对这些愚蠢的问题很陌生。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-28
  • 2020-01-07
  • 2020-12-13
  • 1970-01-01
  • 2020-01-28
  • 1970-01-01
相关资源
最近更新 更多