Matplotlib计算给定字符串的轴坐标范围

2024-04-26 06:48:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过以下方式使轴文本对象居中:

  1. 获取文本坐标中的宽度除以2。在
  2. 从x轴上的中心(提供的)位置减去该值。在
  3. 使用结果值作为x起始位置(ha='left')。在

我已经看到了在绘制如下字符串后如何获得x坐标(边界)的示例:

import matplotlib as plt

f = plt.figure()
r = f.canvas.get_renderer()
t = plt.text(0, 0, 'test')
bb = t.get_window_extent(renderer=r)
width = bb.width

但是,我想在绘图之前知道字符串的宽度(以轴坐标表示),这样我就可以预测要进行的调整。在

我尝试了以下操作,但它没有返回正确的轴坐标,我认为可能需要进行转换:

^{pr2}$

下面是一个要使用的示例(最后3行显示了我要做的):

import matplotlib.pyplot as plt
import matplotlib
import numpy as np
%matplotlib inline
prf=[60,70,65,83,77,70,71]
figsize=3.5,4
fig, ax = plt.subplots(1, 1, figsize = figsize, dpi=300)
ind=np.arange(len(prf))

p=ax.bar(ind,prf,color=colrs,edgecolor='none')
t = matplotlib.textpath.TextPath((0,0), 'test', size=9)
bb = t.get_extents()
w = bb.width
center=len(ind)/2
xposition=center-w/2
ax.text(xposition,110,'test',size=9)

这个问题是this帖子的后续内容。在

我知道我可以使用ha='center',但这实际上是用于更复杂的文本(多色),它没有提供该选项。在

提前谢谢!在


Tags: test文本importget宽度matplotlibasplt
1条回答
网友
1楼 · 发布于 2024-04-26 06:48:52

可以创建文本对象,获取其边界框,然后再次删除文本。您可以将边界框转换为数据坐标(我假设您指的是数据坐标,而不是问题中的轴坐标),然后使用这些坐标创建左对齐文本。在

import matplotlib.pyplot as plt

ax = plt.gca()
ax.set_xlim(0,900)
#create centered text 
text = ax.text(400,0.5, "string", ha="center", color="blue")
plt.gcf().canvas.draw()
bb = text.get_window_extent()
# remove centered text
text.remove()
del text
# create left aligned text from position of centered text
bb2 = bb.transformed(ax.transData.inverted())
text = ax.text(bb2.x0,0.5, "string", ha="left", color="red")

plt.show()

相关问题 更多 >