2015-02-25 5 views
1

Я хотел бы получить позицию (x, y либо осевых данных, либо масштаб) легенды matplotlib. Я попытался следующий:Получить название легенды Matplotlib?

l = ax.legend(...) 
l.get_window_extent() 
l.legendPatch.get_bbox().inverse_transformed(ax.transAxes) 

Моей целью будет использовать положение легенды, чтобы добавить текстовое поле с дополнительной информацией, рядом с ним.

ответ

2

Способ получения положения легенды зависит от легенды и когда вы получаете к ней доступ.

Похоже, что это лучше всего, если вы получаете доступ к объекту легенды после того, как вы рисуете сюжет, то есть после вызова:

plt.draw() 

Доступ к позиции объекта легенды после этого будет возвращать рисунок пиксели, которые можно использовать позже ,

Есть по крайней мере два способа доступа к позиции условных обозначений:

  1. универсальный путь через .get_window_extent() метод
  2. Если легенда имеет раму с помощью .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() 

Это дает:

legend annotated

+0

Когда я изменить расположение легенды, текст аннотации не двигается с легенда для определенных мест, например leg = ax.legend (['line 1'], loc = 'center right', frameon = False) –

Смежные вопросы