将两个 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()
.
来查看
一种解决方法是将 s
与 range(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()
或者在 s
上 reset_index()
两次并使用 x='index'
:
绘图
ax = m.unstack('Brand').plot.bar()
s.reset_index().reset_index().plot(x='index', y='Price', ax=ax, label='Mean price')
我正在尝试绘制:线图和条形图在同一张图上,但线条没有出现。这是代码:
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()
.
一种解决方法是将 s
与 range(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()
或者在 s
上 reset_index()
两次并使用 x='index'
:
ax = m.unstack('Brand').plot.bar()
s.reset_index().reset_index().plot(x='index', y='Price', ax=ax, label='Mean price')