Python叠加如何条形图与多个系列?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (744)

我需要创建一个像下面这样的图表,一系列堆叠的条形图。有些值是正的,有些是负的。我希望图表能像EXCEL中的堆叠条形图一样显示出来,这会将正值和负值叠加起来。对于N个类别,是否有一种简单的方法来做到这一点?

以下是一些示例数据:

df = pd.DataFrame(index=['06-11-2018', '06-12-2018', '06-13-2018', '06-14-2018', '06-15-2018'], 
                  data={'A': [-378, -2347, 509, 987, 513], 
                        'B': [-527, -2599, 765, 533, 670], 
                        'C': [-2343, -2273, 2093, 2197, 1990], 
                        'D': [-1845, -1853, 3325, 1306, 2160]})

提问于
用户回答回答于

数据帧plot函数以你描述的方式处理负值。

df.plot(kind="bar", stacked=True)

给我们这个图表:

我们可以通过将数据帧的行相加并绘制返回的行,在问题的图像中添加一条与黑线类似的“总”行。Series对象位于相同的axes作为条形图:

生成第二个图表的代码如下所示。

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame(index=['06-11-2018', '06-12-2018', '06-13-2018',
                         '06-14-2018', '06-15-2018'], 
                  data={'A': [-378, 2347, 509, 987, 513], 
                        'B': [527, 2599, -765, 533, 670], 
                        'C': [2343, -2273, 2093, -2197, 1990], 
                        'D': [1845, 1853, -3325, 1306, 2160]})

ax = df.plot(kind="bar", stacked=True)
df.sum(axis=1).plot(ax=ax, color="k")

plt.show()

扫码关注云+社区

领取腾讯云代金券