我必须绘制一些数据和一些垂直线来划分有趣的间隔,然后我想使用text
添加一些标签。我不能完全避免标签与数据或垂直线重叠,所以我决定在文本周围放一个bbox
来保持它的可读性。我的问题是我不能在这个框内居中对齐它,这显然是在我看来,这是显而易见的,而且相当烦人。
我正在做这样的事情:
import numpy
import matplotlib
import matplotlib.pyplot as plt
fig=plt.figure()
plot=fig.add_subplot(111)
x=numpy.linspace(1,10,50)
y=numpy.random.random(50)
plot.plot(x,y)
plot.text(4.5,.5,'TEST TEST',\
bbox={'facecolor':'white','alpha':1,'edgecolor':'none','pad':1})
plot.axvline(5,color='k',linestyle='solid')
plt.show()
字符串
这将创建以下图:
这是很明显的,该文本是不是在其bbox
居中.我怎么能改变这一点?我花了相当长的时间在谷歌上,但我找不到任何东西.
编辑:
谢谢你到目前为止的建议。
This表明我所看到的实际上是期望的行为。显然,matplotlib
的新版本中的bbox
是考虑到它所包含的文本的可能最大下降(“g”的下降)而选择的。
当一个“g”出现在文本中时,这确实看起来很好:
不幸的是,在我的例子中没有“g”或类似的下降。
3条答案
按热度按时间atmip9wb1#
使用文本属性
ha
和va
:字符串
要进行检查,请在图的中心绘制线条:
型
c6ubokkw2#
现在似乎有了在坐标系中正确选择position the text的选项(特别是新的
va = 'baseline'
)。然而,正如用户35915所指出的,这不会改变框相对于文本的对齐方式。这种对齐方式在个位数中尤其明显,特别是数字“1”(参见this bug)。在此之前,我的解决方法是手动放置矩形,而不是通过bbox参数:字符串
的数据
q8l4jmvw3#
您可以使用
text
函数的verticalalignment
和horizontalalignment
参数来将文本精确定位在边界框内。以下是更新后的代码:字符串