【发布时间】:2015-02-25 04:52:00
【问题描述】:
我想获取 matplotlib 图例的位置(轴数据或比例的 x、y)。我尝试了以下方法:
l = ax.legend(...)
l.get_window_extent()
l.legendPatch.get_bbox().inverse_transformed(ax.transAxes)
我的目标是使用图例的位置在旁边添加一个带有附加信息的文本框。
【问题讨论】:
标签: python matplotlib
我想获取 matplotlib 图例的位置(轴数据或比例的 x、y)。我尝试了以下方法:
l = ax.legend(...)
l.get_window_extent()
l.legendPatch.get_bbox().inverse_transformed(ax.transAxes)
我的目标是使用图例的位置在旁边添加一个带有附加信息的文本框。
【问题讨论】:
标签: python matplotlib
获取图例位置的方式取决于图例以及您何时访问它。
似乎最好在绘制图之后访问图例对象,即在调用之后:
plt.draw()
在之后访问图例对象位置,这将返回您以后可以使用的图形像素。
访问图例位置至少有两种方式:
.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,这会使您的绘图保持在不会重叠或与您的绘图图重叠最少的最佳位置。
【讨论】: