阅读Python中图例的高度

naughty_waves

我有一些带有很多信息和线条的图,所以有时我倾向于将图例放在图本身之外using bbox_to_anchor我也更喜欢有剧情的标题,但是在这种情况下,它的位置会与图例一致。下面的示例仅说明问题。

import numpy as np
import matplotlib.pyplot as plt

t = np.arange(0.0, 2.0, 0.01)
s = 1 + np.sin(2 * np.pi * t)
r = 1 + np.sin(4 * np.pi * t)
q = 1 + np.sin(6 * np.pi * t)

fig, ax = plt.subplots()
ax.plot(t, s, label='S')
ax.plot(t, r, label='R')
ax.plot(t, q, label='Q')
leg = ax.legend(loc=3, ncol=3, bbox_to_anchor=(.0, 1.02, 1., .102), borderaxespad=0., mode='expand')
ax.set_title('SIMPLE PLOT', y=1.1)
plt.show()

为了避免这种情况,我设置了某种y值(例如y=1.1)。我想自动执行此过程,因为我不断使用新数据更新同一地块,因此图例的大小会增加,因此需要相应地调整标题的位置。

  • 有没有办法使这个过程自动化?
  • Python中是否有一个函数可以读取图例的高度,以便可以用来调整标题位置?
认真的重要性

图例的高度在绘制时确定。您可以通过绘制图形后得到它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()

在此处输入图片说明

请注意,在这里我也constrained_layout曾经使标题不受图形边界的限制。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章