我需要创建一个如下图所示的图表,一系列堆叠的条形图。有些值是正值,有些值是负值。我希望图表的显示就像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]})
发布于 2018-06-21 02:04:18
数据框的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()
https://stackoverflow.com/questions/50953645
复制相似问题