Способ получения положения легенды зависит от легенды и когда вы получаете к ней доступ.
Похоже, что это лучше всего, если вы получаете доступ к объекту легенды после того, как вы рисуете сюжет, то есть после вызова:
plt.draw()
Доступ к позиции объекта легенды после этого будет возвращать рисунок пиксели, которые можно использовать позже ,
Есть по крайней мере два способа доступа к позиции условных обозначений:
- универсальный путь через
.get_window_extent()
метод
- Если легенда имеет раму с помощью
.get_frame().get_bbox().bounds
методов
Очевидно, что если легенда имеет нет рамки, тогда 1-й метод является предпочтительным :-)
Вы можете играть с обоими, чтобы увидеть, как лучше всего справиться с каждым.
Вот пример того, как вы могли бы сделать это:
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 = 'center right', frameon = False) –