如何在熊猫中创建叠加条形图

时间:2018-05-03 14:55:36

标签: python pandas plot

在更新我的一些早期代码以使用pandas.DataFrame时,我遇到了以下问题......

这是我原始代码创建的参考图:

import pandas as pd
import matplotlib.pyplot as plt

a = range(1, 25)
b = a
c = [x+2 for x in b]
d = [x*2 for x in c]

plt.bar(a, d)
plt.bar(a, c)
plt.bar(a, b)
plt.show()

reference plot

问题定义:

我想使用内置功能的pandas.DataFrame创建这个相同的图。确切地说,只有条形放置是相关的,我对轴刻度的格式化/标记不感兴趣。

df = pd.DataFrame({'a': a, 'b': b, 'c': c, 'd': d}, columns=['a', 'b', 'c', 'd'])
df.set_index('a', inplace=True)

df.plot.bar()
plt.show()

first pandas plot

默认的pandas bar-plot(如上所示)或添加stacked=True选项(见下文)都没有产生所需的结果。

df.plot.bar(stacked=True)
plt.show()

second pandas plot

不幸的是,overlay=True选项不存在。

是否有另一种(最好是优雅的)方法来达到预期的效果?

如果没有别的可用,我只会修改pandas.DataFrame值(即相互减去列),然后使用stacked=True选项。以前,我实施了,我期待看到你的建议......

2 个答案:

答案 0 :(得分:2)

您可以使用subplots返回的值设置ax参数,如下所示:

_, ax = plt.subplots()
df.d.plot(kind='bar', ax=ax, color='red')
df.c.plot(kind='bar', ax=ax, color='green')
df.b.plot(kind='bar', ax=ax, color='blue')

enter image description here

答案 1 :(得分:0)

您还可以执行以下操作。 如果这是您的数据:

a = range(1, 25)
b = [x+1 for x in b]
c = [x+2 for x in b]
d = [x*2 for x in c]

df = pd.DataFrame({'a': a, 'b': b, 'c': c, 'd': d}, columns=['a', 'b', 'c', 'd'])

然后直接在您的数据框上调用 plot。然后您还可以使用 stacked = True 参数。像这样:

df[["a", "b", "c", "d"]].plot(x="d", kind="bar", stacked=True)

图片如下:

picture