通过熊猫绘图界面通过第二个Y轴绘制熊猫数据框时,设置图例位置

时间:2019-01-08 11:34:59

标签: python pandas matplotlib

我正在通过documentation中所述的pandas绘制界面通过第二个y轴绘制pandas数据框,如下所示:

df = pd.DataFrame(np.random.randn(24*3, 3),
                  index=pd.date_range('1/1/2019', periods=24*3, freq='h'))
df.columns = ['A (left)', 'B (right)', 'C (right)']
ax = df.plot(secondary_y=['B (right)', 'C (right)'], mark_right=False)
ax.set_ylabel('A scale')
ax.right_ax.set_ylabel('BC scale')
ax.legend(loc='upper right')
plt.show()

产生 enter image description here 可以看出,当我使用ax.legend(loc='upper right')设置位置时,图例会丢失条目。

有人知道我如何设置图例位置并保留所有条目吗?

谢谢!

1 个答案:

答案 0 :(得分:4)

我们可以使用.get_legend_handles_labels()获得更正确的解决方案:

np.random.seed(42)

df = pd.DataFrame(np.random.randn(24*3, 3),
                  index=pd.date_range('1/1/2019', periods=24*3, freq='h'))
df.columns = ['A (left)', 'B (right)', 'C (right)']
ax = df.plot(secondary_y=['B (right)', 'C (right)'], mark_right=False)
ax.set_ylabel('A scale')
ax.right_ax.set_ylabel('BC scale')

h1, l1 = ax.get_legend_handles_labels()
h2, l2 = ax.right_ax.get_legend_handles_labels()
ax.legend(h1+h2, l1+l2, loc=1)

enter image description here

我们之所以需要使用该方法,是因为axax.right_ax各自都有自己的图例,只需将它们设置在相同的位置即可将它们相互叠加。