Центрируйте этикетку внутри круга с помощью matplotlib - PullRequest
0 голосов
/ 04 мая 2018

Я бы хотел построить круги с помощью matplotlib (патчи) и комментировать их. Аннотация - это слово, и оно должно быть в центре круга.

Пока что я могу нарисовать круг и аннотировать его: enter image description here

Но аннотация не центрирована ни по горизонтали, ни по вертикали. Для этого мне понадобится доступ к размерам текста.

Есть ли способ получить доступ к размерам текста в "системах координат"? Например, если круг имеет радиус 15 (15 символов, а не пикселей), текст будет иметь длину 12 элементов (не пикселей).

Я открыт для любых других предложений о том, как это сделать.

Вот мой код:

import matplotlib as mpl
import matplotlib.pyplot as plt
from matplotlib.figure import Figure

fig, ax = plt.subplots()

ax = fig.add_subplot(111)

x = 0
y = 0

circle = plt.Circle((x, y), radius=1)

ax.add_patch(circle)

label = ax.annotate("cpicpi", xy=(x, y), fontsize=30)

ax.axis('off')
ax.set_aspect('equal')
ax.autoscale_view()

plt.show()

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Вы можете добавить два дополнительных аргумента к вызову annotate():

label = ax.annotate("cpicpi", xy=(x, y), fontsize=30,
           verticalalignment='center', horizontalalignment='center')
0 голосов
/ 04 мая 2018

Вам необходимо установить горизонтальное выравнивание в ax.annotate, используя ha="center". То же самое можно сделать для вертикального направления, если необходимо, используя аргумент va="center"

fig, ax = plt.subplots()

ax = fig.add_subplot(111)

x = 0
y = 0

circle = plt.Circle((x, y), radius=1)

ax.add_patch(circle)

label = ax.annotate("cpicpi", xy=(x, y), fontsize=30, ha="center")

ax.axis('off')
ax.set_aspect('equal')
ax.autoscale_view()

plt.show()

enter image description here

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