【问题标题】:BoxStyle/FancyBboxPatch/bbox padding ignored by alignment in Matplotlib在 Matplotlib 中对齐忽略 BoxStyle/FancyBboxPatch/bbox 填充
【发布时间】:2019-03-17 10:13:42
【问题描述】:

我正在尝试为文本添加背景,并将其覆盖在图表上。我这样做的方法是使用pyplot.textbbox 参数。

我的代码:

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()

输出:

如您所见,verticalalignment='bottom' 只考虑文本的底部,忽略 bbox 的填充。是否有任何“本地”手段来纠正这个问题?如果不是,我应该如何正确偏移坐标以补偿填充?

【问题讨论】:

  • 您想将框的底部与行对齐,还是将字符(f 或 o)的底部与行对齐?
  • 盒子底部。虽然字符的底部听起来也是一个合理的问题。

标签: matplotlib alignment padding text-alignment


【解决方案1】:

框的边距是 50 pts 字体大小的 0.5 倍。这意味着您要将文本从数据坐标中的某个位置偏移 25 个点。

幸运的是,使用 Annotation 而不是 Text 可以做到这一点。创建Annotation 可以通过.annotate 完成,它采用xytexttextcoords 参数来实现此目的。

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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-15
    • 2011-02-13
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 2015-12-12
    • 2019-09-02
    • 2013-06-11
    相关资源
    最近更新 更多