在Matplotlib中对齐会忽略BoxStyle / FancyBboxPatch / bbox填充

时间:2018-10-12 08:14:04

标签: matplotlib alignment padding text-alignment

我正在尝试为文本添加背景,并将其覆盖在图形上。我这样做的方法是使用bbox的{​​{1}}参数。

我的代码:

pyplot.text

输出:

bbox BoxStyle FancyBboxPatch ignores padding in alignment

如您所见,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的填充。是否有任何“本机”手段可以纠正此问题?如果没有,应该如何正确偏移坐标以补偿填充?

1 个答案:

答案 0 :(得分:1)

此框的边距填充为50点字体字体的0.5倍。这意味着您要使文本从数据坐标中的位置偏移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