获取 Matplotlib 图例位置?

ark*_*tke 5 python matplotlib

我想获取 matplotlib 图例的位置(轴数据或比例的 x,y)。我已经尝试过以下方法:

l = ax.legend(...)
l.get_window_extent()
l.legendPatch.get_bbox().inverse_transformed(ax.transAxes) 
Run Code Online (Sandbox Code Playgroud)

我的目标是使用图例的位置添加一个文本框,旁边包含附加信息。

Pri*_*mer 3

获取图例位置的方式取决于图例以及您何时访问它。

似乎最好是在绘制绘图后访问图例对象,即在调用之后:

plt.draw()
Run Code Online (Sandbox Code Playgroud)

此后访问图例对象位置将返回图形像素,您可以稍后使用。

至少有两种方法可以访问图例位置:

  1. 通用.get_window_extent()方法
  2. .get_frame().get_bbox().bounds如果图例通过方法有框架

显然,如果图例没有框架,则首选第一种方法:-)

您可以同时尝试两者,看看如何最好地处理每一种。

以下是如何执行此操作的示例:

import matplotlib.pyplot as plt

x = y = [1,2,3,4,5]

fig, ax = plt.subplots()

ax.plot(x,y)
leg = ax.legend(['line 1'], loc=6, frameon=False)

plt.draw()

p = leg.get_window_extent()

ax.annotate('Annotation Text', (p.p0[0], p.p1[1]), (p.p0[0], p.p1[1]), 
            xycoords='figure pixels', zorder=9)

plt.show()
Run Code Online (Sandbox Code Playgroud)

这产生:

图例注释