将两个 pandas 系列绘制成一个图形

Plot two pandas seriers to one figure

我正在尝试绘制:线图条形图在同一张图上,但线条没有出现。这是代码:

df = pd.read_csv('cars.csv')
df['Price'] = pd.to_numeric(df['Price'])
m = df.groupby(['Brand', 'Year'])['Price'].mean()
s = df.groupby('Year').Price.mean()
ax = m.unstack('Brand').plot.bar()
s.plot(x=ax.get_xticks('Year'), ax=ax, kind='line', label='Mean price')
y_formatter = ScalarFormatter(useOffset=False)
plt.show()

我做错了什么?

这是因为条形图将 x 变量视为分类变量,因此条形图会自动向下移动到 x=0,1,2,...,并且它们的刻度通过 xticklabels 重新标记。您可以通过检查 ax.get_xlim()ax.get_xticklabels().

来查看

一种解决方法是将 srange(len(s)) 进行对比,以手动将其向下移动到 x=0,1,2,...:

ax = m.unstack('Brand').plot.bar(legend=False)
ax.plot(range(len(s)), s, label='Mean price')
ax.legend()

或者在 sreset_index() 两次并使用 x='index':

绘图
ax = m.unstack('Brand').plot.bar()
s.reset_index().reset_index().plot(x='index', y='Price', ax=ax, label='Mean price')