获取 Matplotlib 图例位置?
Get Matplotlib legend location?
我想获取 matplotlib 图例的位置(轴数据或比例的 x、y)。我尝试了以下方法:
l = ax.legend(...)
l.get_window_extent()
l.legendPatch.get_bbox().inverse_transformed(ax.transAxes)
我的目标是使用图例的位置添加一个旁边带有附加信息的文本框。
获取图例位置的方式取决于图例以及您何时访问它。
似乎最好是在绘制绘图之后访问图例对象,即在调用之后:
plt.draw()
在之后访问图例对象位置这将return 数字像素供您稍后使用。
至少有两种方法可以访问图例位置:
- 通过
.get_window_extent()
方法的通用方法
- 如果图例通过
.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()
这产生:
在这行代码上
leg = ax.legend(['line 1'], loc=6, frameon=False)
使 loc=0
使您的绘图保持在最佳位置,不会重叠或与您的绘图重叠最少。
我想获取 matplotlib 图例的位置(轴数据或比例的 x、y)。我尝试了以下方法:
l = ax.legend(...)
l.get_window_extent()
l.legendPatch.get_bbox().inverse_transformed(ax.transAxes)
我的目标是使用图例的位置添加一个旁边带有附加信息的文本框。
获取图例位置的方式取决于图例以及您何时访问它。
似乎最好是在绘制绘图之后访问图例对象,即在调用之后:
plt.draw()
在之后访问图例对象位置这将return 数字像素供您稍后使用。
至少有两种方法可以访问图例位置:
- 通过
.get_window_extent()
方法的通用方法 - 如果图例通过
.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()
这产生:
在这行代码上
leg = ax.legend(['line 1'], loc=6, frameon=False)
使 loc=0
使您的绘图保持在最佳位置,不会重叠或与您的绘图重叠最少。