【问题标题】:How to plot a bar and line on the same chart with separate axes?如何在具有不同轴的同一图表上绘制条形图和线形图?
【发布时间】:2020-03-06 04:34:33
【问题描述】:

我正在尝试使用 matplotlib 在同一个图表上的不同 y 轴上绘制条形图和一条线。由于某种原因,它们没有出现在同一张图表上,以下代码在某些情况下有效,但在这种情况下无效。

d = {'Flag': [0.2, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0.5],
     'Year': [1956, 1994, 1994, 2000, 2000, 2000, 2004, 2004, 2004, 2004, 2005, 2005, 2005, 2005, 2019]}
df = pd.DataFrame(data=d)

bin_grp = df.groupby(df.Year)
grp = bin_grp['Flag'].agg(['mean', 'count'])

plt.figure()
ax1 = grp['count'].plot(color='green', kind='bar')
ax2 = ax1.twinx()
grp['mean'].plot(ax=ax2)
plt.show()

通过在相同情况下使用略有不同的数据,我的直觉是,问题是由于条形图将 x 轴视为非数字而折线图将其视为数字,然后是“间隙” x 轴值会导致问题。

【问题讨论】:

    标签: python pandas matplotlib


    【解决方案1】:

    正如你所说,这应该与x轴有关。 old github issue 提到了一个类似的问题,设置 sharex=False 可以解决问题。我找不到比出现此问题的原因更准确的信息了。

    但是,为了在这种情况下获得正确的绘图,您可以使用matplotlib.axes.Axes.plot 函数而不是pandas.DataFrame.plot,如下所示。

    fig, ax = plt.subplots()
    ax2 = ax.twinx()
    ax.bar(grp.index, grp['count'], color='green')
    ax2.plot(grp.index, grp['mean'])
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 2015-09-01
      • 2020-05-06
      • 2016-11-03
      • 1970-01-01
      • 2019-07-15
      • 2016-10-22
      • 2014-05-07
      • 2016-07-09
      相关资源
      最近更新 更多