使用Pandas DF和Matplotlib绘制主要(条形)和次要(线)轴,但要一起显示图例..?

时间:2015-09-05 06:46:35

标签: python pandas matplotlib

用两个图例绘制的图表是主轴上条形图的一个图例,另一个是二轴上的折线图,如何将两个图例组合在一起。并保存要在Power point中使用的绘图

下面是我的代码,它将图例放在两个位置,但我希望它们一个在另一个之下。

ax = df.plot(x=['TIME'],y =['Column A'],kind='bar',use_index=True,color='g',legend=True)
ax.set_ylabel("Label A")

ax2 = ax.twinx()

ax2.plot(df[['Column B']].values,linestyle='-', marker='o', linewidth=2.0,color ='b')
ax2.set_ylabel("Label B")
ax2.legend('LegendB',loc=1)

这会生成绘图,但图例B位于右上角,图例A默认位于左上角。此外,我可以看到传奇B被剪切而没有显示所有角色。

当我将ax2.legend行更改为

ax2.legend('Legend B',loc=0)

然后两个传说相互叠加。实际上很混乱。

为了保存图,我使用的代码为

ax2.legend('LegendB',loc=1)    
fig = ax.get_figure()
fig.set_size_inches(9.5, 3)
fig.savefig('test.png', bbox_inches='tight',dpi=100)
plt.show() ## To Show the Plot

但是这会在LOC = 1

时将图形与图例相互叠加

所以我的问题是: 1.如何将传说一个接一个地组合在一起.. ?? 2.何时保存,因为它显示的情节...... ??

谢谢大家

1 个答案:

答案 0 :(得分:0)

您可以组合多个轴的图例,但您需要手动执行(半)。这里有一些陷阱你需要注意,因为你正在混合pandas情节和matplotlib情节。有关详细信息,请参阅matplotlib's legend guide

这是我要写的:

ax1 = df.plot(x=['TIME'], y=['Column A'], kind='bar', color='r', legend=False)
ax1.set_ylabel("Label A")
ax2 = ax1.twinx()
ax2.plot(df['Column B'].values, linestyle='-', marker='o', linewidth=2.0, color ='b', label="test2")
ax2.set_ylabel("Label B")

lines1, labels1 = ax1.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
ax2.legend(lines1 + lines2, labels1 + labels2, loc=0)

请注意,我向label添加了ax2.plot参数。这对于确保ax2.get_legend_handles_labels()返回该行的句柄非常重要。 Pandas'图表会自动添加标签,因此无需执行任何操作。

另请注意,我已将legend=False传递给pandas绘图功能,以禁止自动创建第一个图例。