Python 如何在同一图表上用单独的轴绘制条形图和直线图?

Python 如何在同一图表上用单独的轴绘制条形图和直线图?,python,pandas,matplotlib,Python,Pandas,Matplotlib,我正在尝试使用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]

我正在尝试使用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轴值中的“间隙”会导致问题。

正如您所说,这应该与x轴有关。a提到了一个类似的问题,设置
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()