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

Cor*_*yer 0 python matplotlib pandas

我正在通过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()
Run Code Online (Sandbox Code Playgroud)

产生 在此处输入图片说明 可以看出,当我使用设置位置时,图例会丢失条目ax.legend(loc='upper right')

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

提前致谢!

Cha*_*dau 5

我们可以使用.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)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我们需要使用该方法的原因是因为axax.right_ax每个人都有自己的传说,只是将它们设置为相同的位置将使其在彼此的顶部。