преобразование размера текста в координаты данных - PullRequest
6 голосов
/ 06 июня 2011

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

#!/usr/bin/python 
import matplotlib.pyplot as plt

xx=[1,2,3]
yy=[2,3,4]
dy=[0.1,0.2,0.05]

fig=plt.figure()
ax=fig.add_subplot(111)

ax.errorbar(xx,yy,dy,fmt='ro-',ms=6,elinewidth=4)

# HERE: can one get the text bbox size?
txt=ax.text(xx[1]-0.1,yy[1]-0.4,r'$S=0$',fontsize=16)

ax.set_xlim([0.,3.4])
ax.set_ylim([0.,4.4])

plt.show()

Есть ли способ сделать что-то вроде этого псевдокода вместо этого?

x = xx[1] - text_height
y = yy[1] - text_width/2
ax.text(x,y,text)

Ответы [ 2 ]

11 голосов
/ 06 июня 2011

Вообще говоря, вы не можете получить размер текста до тех пор, пока он не будет нарисован (таким образом, хаки в ответе @ DSM).

Для того, что вы хотите сделать, вам будет гораздо лучше использовать annotate .

например. ax.annotate('Your text string', xy=(x, y), xytext=(x-0.1, y-0.4))

Обратите внимание, что вы также можете указать смещение в точках и, таким образом, сместить текст по его высоте (просто укажите textcoords='offset points')

Если вы хотите настроить вертикальное выравнивание, горизонтальное выравнивание и т. Д., Просто добавьте их в качестве аргументов в annotate (например, horizontalalignment='right' или эквивалентно ha='right')

7 голосов
/ 06 июня 2011

Меня это совсем не устраивает, но работает следующее:Я был разочарован, пока не нашел этот код для аналогичной проблемы, которая предложила способ получить в рендерере.фактические данные указывают , они не обязательно убирают поле с маркера или панели ошибок.Так что я не знаю, насколько это будет полезно на практике, но я полагаю, что будет не так сложно перебрать все нарисованные объекты и перемещать текст, пока он не исчезнет.Я думаю, что связанный код пытается что-то похожее.

Редактировать: Обратите внимание, что это было явно вежливое согласие;Я бы использовал решение Джо Кингтона, если бы на самом деле хотел это сделать, как и все остальные.: ^)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...