在matplotlib中获取图例的宽度

时间:2016-05-02 18:11:58

标签: matplotlib

我曾经使用以下方法在图坐标中获取图例的宽度:

fig = plt.figure()
ax = fig.add_axes((0.1, 0.1, 0.8, 0.8))
ax.scatter(xdata, ydata)
legend = ax.legend(loc="lower left", borderaxespad=0)
legend_width = legend.get_window_extent().inverse_transformed(fig.transFigure).width

我最近将matplotlib更新为1.5.1版。在变换之前宽度(和高度)总是1.0,然后在变换之后它们是非常小的值(宽度= 0.0015625,高度= 0.0020833),在图形坐标中没有意义。

现在有不同的方法来获得图例宽度吗?或者这是一个错误吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

您正在通过性能优化得到一点点。我们现在推迟实际渲染数字。在大多数交互式情况下,这意味着延迟渲染,直到第一次由GUI框架重新绘制。图例的确切大小是在绘制时确定的,因此当您要求窗口范围时,您将获得占位符值。

要解决此问题,您可以通过

强制渲染
fig.canvas.draw()

通常,您不想使用get_window_extent。这是DPI依赖的,可能导致一些非常奇怪的难以追踪错误。返回的值取决于不一定面向用户的内部细节,并且一旦您将输出保存到可以(将)不同步的位置。