2017-02-17 8 views
1

Используя matplotlib, я хотел бы разместить текстовое поле под легендой, содержащее некоторые примечания о фигуре. Моя легенда находится за осями справа. Мой план состоял в том, чтобы найти положение легенды в системе координат фигуры, а затем использовать метод фигуры для размещения моих заметок. Тем не менее, я не могу понять, как получить эти легендарные координаты. Любые предложения или альтернативные планы будут высоко оценены.Как разместить текстовое поле непосредственно под легендой в matplotlib?

ответ

2

По-видимому, можно только прочитать положение легенды после его рендеринга. Тогда координаты будут в пикселях. Затем можно создать новую ось, используя fig.add_axes, которая будет чуть ниже легенды, используя координаты легенды и размеры фигуры. Ниже приведен пример:

from matplotlib.pyplot import subplots 
fig,ax = subplots() 
fig.subplots_adjust(right=0.75) 
ax.plot([0,1],'.-',label="line1") 
ax.plot([0.1,1.1],'.-',label="line2") 
leg = ax.legend(bbox_to_anchor=(1.05, 1),loc=2, borderaxespad=0) 

fig.canvas.draw() # this draws the figure 
        # which allows reading final coordinates in pixels 
leg_pxls = leg.get_window_extent() 
ax_pxls = ax.get_window_extent() 
fig_pxls = fig.get_window_extent() 

# Converting back to figure normalized coordinates to create new axis: 
pad = 0.025 
ax2 = fig.add_axes([leg_pxls.x0/fig_pxls.width, 
        ax_pxls.y0/fig_pxls.height, 
        leg_pxls.width/fig_pxls.width, 
        (leg_pxls.y0-ax_pxls.y0)/fig_pxls.height-pad]) 

# eliminating all the tick marks: 
ax2.tick_params(axis='both', left='off', top='off', right='off', 
       bottom='off', labelleft='off', labeltop='off', 
       labelright='off', labelbottom='off') 

# adding some text: 
ax2.text(0.1,0.1,"some text\nabout the\nlines") 

, который генерирует эту цифру:

enter image description here

Рама может быть легко отключить, если не требуется.