matplotlib:图形图例与 mode="expand" 问题

matplotlib: Figure Legend with mode="expand" problem

我在定义 fig.legend() 时尝试使用 mode="expand"。

我希望它扩展到我正在使用 ax.get_position() 检索的 xaxis 范围。

我遇到了 2 个问题:

  1. 它在左轴上正确对齐,但由于某种原因在右轴上对齐过度。
  2. 图例的 'upper center' 与我的 4 元组 bbox 的上中心不对齐。我必须手动捏造数字才能做到这一点。

见下面的代码。 (Matplotlib 3.1.0; Python 3.7; Numpy 1.16.4)

import matplotlib
import numpy as np

fig, ax = plt.subplots()
x = np.linspace(-2*np.pi,2*np.pi,100)
ax.plot(x,np.sin(x), label='sine')
ax.plot(x,np.cos(x), label='cos')
ax.plot(x,np.arctan(x), label='arctan')

axbox = ax.get_position()    

fig.legend(loc='upper center', bbox_to_anchor=(axbox.x0, axbox.y0, axbox.x1, axbox.y0), 
           bbox_transform=fig.transFigure, ncol=3, title='fig leg 3 expand', 
           prop={'size': 'medium'}, borderaxespad=0, mode="expand",
           )

resulting plot

在这种情况下,我认为我们可以更改对轴的变换参考并将 xy 值设置为 0 到 1 的范围。这是否符合您的意图,我不确定 LHS 和 RHS。

fig.legend(loc='upper center', bbox_to_anchor=(0,0,1,0.15), 
           bbox_transform=ax.transAxes, ncol=3, title='fig leg 3 expand', 
           prop={'size': 'medium'}, borderaxespad=0, mode='expand',
           )