我正在尝试使用pandas DataFrame绘制带有辅助y轴的条形图。但是,返回的图形在x轴上未对齐,如下所示
换句话说,似乎黑色曲线的x = 1与小节的x = 2相对应。有一个简单的解决办法吗?数据框具有以下值:
生成图的代码如下所示:
values = np.array([[ 5.8, 3.5, 0.7, 32.2],
[ 4.8, 4.7, 0.5, 23.5],
[ 4.8, 4.7, 0.5, 23.1],
[ 4.6, 5.1, 0.3, 23.6],
[ 4.4, 5.2, 0.5, 22.1]])
pdata = pd.DataFrame(values,index=[1,2,3,4,5],columns=['a1', 'a2', 'a3', 'pie'])
fig,ax = plt.subplots(figsize=(5,3))
axp = ax.twinx()
pdata[['a1','a2','a3']].plot(ax=ax,kind='bar',stacked=True,rot=0)
pdata['pie'].plot(ax=axp,color='k',rot=0)
axp.set_ylim([0,100])
ax.set_ylim([0,10])
ax.legend(loc=2)
axp.legend(loc=1)
ax.set_ylabel('value')
axp.set_ylabel('pie')
答案 0 :(得分:3)
df.plot(kind='bar')
在range(len(df))
上绘制条形,并用df.index
标记刻度。由于您的索引是1,2,3,4,5
,因此您会看到线图已移位。
一种解决方法是手动绘制pie
:
fig,ax = plt.subplots(figsize=(5,3))
axp = ax.twinx()
pdata[['a1','a2','a3']].plot(ax=ax,kind='bar',stacked=True,rot=0)
# note the difference
axp.plot(range(len(pdata)), pdata['pie'], color='k')
axp.set_ylim([0,100])
ax.set_ylim([0,10])
ax.legend(loc=2)
axp.legend(loc=1)
ax.set_ylabel('value')
axp.set_ylabel('pie')
输出: