用次要y轴绘制熊猫图的barplot:在x轴上未对齐

时间:2019-09-05 13:41:37

标签: python pandas matplotlib

我正在尝试使用pandas DataFrame绘制带有辅助y轴的条形图。但是,返回的图形在x轴上未对齐,如下所示

enter image description here

换句话说,似乎黑色曲线的x = 1与小节的x = 2相对应。有一个简单的解决办法吗?数据框具有以下值:

enter image description here

生成图的代码如下所示:

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')

1 个答案:

答案 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')

输出:

enter image description here