获取matplotlib中图例的宽度

获取matplotlib中图例的宽度,matplotlib,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 我最近

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

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),在地物坐标中没有意义

现在是否有其他方法获得图例宽度?还是这是一只虫子


谢谢大家!

性能优化让您受益匪浅。现在,我们尽可能推迟实际渲染图形。在大多数交互式情况下,这意味着延迟渲染,直到GUI框架第一次重新绘制。图例的确切大小是在绘制时计算出来的,因此,当您请求窗口范围时,您将返回占位符值

要解决此问题,可以通过以下方式强制渲染:

fig.canvas.draw()

通常,您不希望使用
get\u window\u extent
。它依赖于DPI,可能导致一些非常奇怪的难以追踪的bug。返回的值取决于内部细节,这些细节不一定是面向用户的,一旦您将输出保存到某个地方,您就可以(将)停止同步。

谢谢,这确实解决了问题。我一直在调用plt.draw(),但这显然不足以更新这些值。是否有其他方法可以获得图例框的宽度,而我应该使用它?我在图中有几个轴,我希望其中一个轴的宽度与图例的宽度相匹配,这样事情就可以很好地排列起来……Plt.draw返回到draw\u idle。我认为有一种方法可以设置传奇的宽度,但我不确定(在手机上)。