BoxStyle / FancyBboxPatch / заполнение bbox игнорируется выравниванием в Matplotlib - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь добавить фон к тексту и наложить его на график.Я делаю это, используя параметр bbox, равный pyplot.text.

Мой код:

import matplotlib.pyplot as plt
plt.xlim(0.4,0.6)
plt.ylim(-0.1,0.1)
bbox = dict(facecolor='pink', alpha=0.2, edgecolor='red', boxstyle='square,pad=0.5')
plot,= plt.plot([0.4,0.6],[0,0])
text = plt.text(0.5, 0, 'foo goo', color='gold', size=50, bbox=bbox, horizontalalignment='center', verticalalignment='bottom')
plt.show()

Выход:

bbox BoxStyle FancyBboxPatch ignores padding in alignment

Как видите, verticalalignment='bottom'учитывает только нижнюю часть текста, игнорируя отступы bbox.Есть ли «родные» средства для исправления этого?Если нет, то как правильно сместить координаты, чтобы компенсировать отступы?

1 Ответ

0 голосов
/ 08 ноября 2018

Поле имеет отступ в 0,5 раза больше размера шрифта в 50 пунктов.Это означает, что вы хотите сместить текст на 25 точек от позиции в координатах данных.

К счастью, использование Annotation вместо Text позволяет сделать именно это.Создание Annotation может быть сделано через .annotate, который принимает аргумент xytext и textcoords именно для этой цели.

import matplotlib.pyplot as plt
plt.xlim(0.4,0.6)
plt.ylim(-0.1,0.1)
bbox = dict(facecolor='pink', alpha=0.2, edgecolor='red', boxstyle='square,pad=0.5')
plot,= plt.plot([0.4,0.6],[0,0])

text = plt.annotate('foo goo', xy=(0.5, 0), xytext=(0,0.5*50), textcoords="offset points", 
                    color='gold', size=50, bbox=bbox, ha='center', va='bottom')

plt.show()

enter image description here

...