我需要创建一个像下面的图表一样的一系列堆积的条形图。有些值为正,有些为负。我希望显示的图表就像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]})
答案 0 :(得分:1)
数据框的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()