2015-12-04 13 views
4

我必须绘制一些数据和一些垂直线来划定有趣的区间,然后我想添加一些标签到使用text。我无法完全避免与数据或垂直线重叠的标签,因此我决定在文本周围放置一个bbox以保持其可读性。我的问题是,我无法在此框中集中对齐,这在我看来清晰可见并且非常烦人。Matplotlib:它的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() 

它创建了以下情节: enter image description here

这是很明显的,该文并没有将其bbox中心。我该如何改变这一点?我在Google上呆了很长时间,但找不到任何东西。

编辑:

感谢迄今建议。

This暗示我所看到的实际上是理想的行为。显然bboxmatplotlib的新版本中的选择是考虑到它包含的文本可能的最大下降('g'的下降)。

当“G”出现在文本,这确实好看: enter image description here 不幸地我没有“G”或任何具有类似下降。有没有人有任何进一步的想法?

+0

望着例如[这](http://stackoverflow.com/questions/17086847/box-around-text-in-matplotlib)的答案,它曾经在历史上的某一点正常工作。但我得到了相同的结果,因为你有,独立于后端我使用 – Bart

+0

是的,这是我采取的建议,应该也许已经提到... – user35915

回答

2

使用文本属性HA和VA:

plot.text(5.5,.5,'TEST TEST TEST TEST', 
      bbox={'facecolor':'white','alpha':1,'edgecolor':'none','pad':1}, 
      ha='center', va='center') 

要检查,在图的中心画线:

plot.axvline(5.5,color='k',linestyle='solid') 
plot.axhline(0.5,color='k',linestyle='solid') 
+2

我也试过,但它并没有改变任何东西我的情况.. – Bart

+2

也许这可以给提示:http://stackoverflow.com/questions/32167608/alignment-of-text-and-the-icon-in-the-legend-box-matplotlib – iMo51

+0

From [link]( http://matplotlib.org/users/text_props.html):“horizo​​ntalalignment控制文本的x位置参数是否指示文本边界框的左侧,中间或右侧”。即ha和va只会影响'bbox'的位置,而不会影响文本在内部的排列方式。 – user35915