图例的高度在绘制时确定。你可以在绘制图形后得到它legend.get_window_extent()
。生成的边界框以像素为单位。为了找到标题的偏移量,您需要从轴的上限中减去图例的上限。因此,您还需要获取以像素为单位的轴位置。
标题可以在图形坐标中偏移(y=1.1
)或点(pad=20
)。我建议在这里使用点,使其独立于轴的大小。因此,您可以计算上部位置的差异,从像素转换为点(即distance [pixels] * ppi / dpi
)并添加一些以点为单位的常量偏移(因为通常您不希望标题恰好位于图例的边界上)。然后将该数字用作pad
.
import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(constrained_layout=True)
ax.plot([1,2,3], np.random.rand(3,5), label='Label')
leg = ax.legend(loc="lower center", ncol=3, bbox_to_anchor=(.0, 1.02, 1., 1.02),
borderaxespad=0, mode='expand')
fig.canvas.draw()
leg_box = leg.get_window_extent()
ax_box = ax.get_position().transformed(fig.transFigure)
pad = (leg_box.y1 - ax_box.y1)*72./fig.dpi + 6
ax.set_title('SIMPLE PLOT', pad=pad)
plt.show()
![enter image description here](https://i.stack.imgur.com/YNGAV.png)
请注意,这里我还使用了constrained_layout
使标题不被图形边界裁剪。