2014-01-09 4 views
2

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

В частности, дается фигура с одним набором клещей этикеток и одной меткой оси вдоль оси х, с размерами шрифта tick_font_size и label_font_size соответственно, что является вертикальным положением y на рисе точках, что привело бы к

ax.annotate('Some text', (x, y), va='top', ...) 

размещение 'Some text' с размером шрифта annotation_font_size, в вертикальном совмещении с меткой оси?


По разным причинам, я должен использовать annotate для этого, и va='top' является ограничением; и мне нужно использовать информацию о размере шрифта выше - то есть, я ищу для функции вида

y = f(tick_font_size, label_font_size, annotation_font_size) 

со всеми значениями в фигурных точек (то есть, пригодные для использования с textcoords='offset points' в annotate). Такой алгоритм должен существовать, поскольку он явно используется matplotlib для размещения метки оси в первую очередь.

+0

'top' недопустимый вариант для га – M4rtini

+0

@ M4rtini: Исправить; благодаря; исправлено. – orome

ответ

1

Получить объект, возвращенный при установке xlabel. Отобразите фигуру и используйте get_position, чтобы получить позицию метки. Оттуда делайте некоторые преобразования и добавляйте аннотацию.

import numpy as np 
import matplotlib.pyplot as plt 

x = np.arange(10) 
y = x**2 

xlabel = plt.xlabel("test") 
plt.plot(x, y) 

ax = plt.gca() 
fig = plt.gcf() 
fig.draw(fig.canvas.get_renderer()) 

trans = xlabel.get_transform() 
xpos, ypos = trans.transform(xlabel.get_position()) # convert to display coordinates 
xpos, ypos = fig.transFigure.inverted().transform([xpos, ypos]) # convert to figure coordinates 
ax.annotate('Some text', (xpos+0.05, ypos), xycoords='figure fraction', va="top") 
plt.show() 
+0

Предположим, что я только что получил «топор», с уже установленными топорами и метками. Как получить «xlabel»? – orome

+0

ax.get_xaxis(). Get_label() – M4rtini

+0

Это полезно, но не совсем то, что я ищу. Мне нужна функция, которая отображает 'ax',' tick_font_size', 'label_font_size' и' annotation_font_size' значение "y", которое выравнивает аннотацию с меткой оси. (Эта функция существует, так как она используется 'matplotlib' для размещения метки оси.) – orome

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