【问题标题】:How to create overlay bar plot in pandas如何在熊猫中创建叠加条图
【发布时间】:2018-10-13 22:43:41
【问题描述】:

在更新我之前的一些代码以使用 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()

问题定义:

我想使用 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()

默认的 pandas 条形图(如上所示)和添加 stacked=True 选项(见下文)都没有产生预期的结果。

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

很遗憾,overlay=True 选项不存在。

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

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

【问题讨论】:

    标签: python pandas plot


    【解决方案1】:

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

    _, 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')
    

    【讨论】:

      【解决方案2】:

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

      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)
      

      这是一张图片:

      【讨论】:

        猜你喜欢
        • 2018-10-05
        • 1970-01-01
        • 2020-10-14
        • 1970-01-01
        • 2020-12-19
        • 1970-01-01
        • 2020-04-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多