我试图通过以下方式居中轴文本对象:
我已经看过如何在绘制如下字符串后获取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
但是,我想在绘图之前知道字符串的宽度(以轴坐标为单位),以便我可以预期进行调整。
我已尝试过以下操作,但它没有返回正确的轴坐标,我认为可能需要进行转换:
t = matplotlib.textpath.TextPath((0,0), 'test', size=9)
bb = t.get_extents()
w = bb.width #16.826132812499999
这是一个可以使用的示例(最后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',但实际上这是一个更复杂的文本(多色),但没有提供该选项。
提前致谢!
答案 0 :(得分:1)
您可以创建文本对象,获取其边界框,然后再次删除文本。您可以将边界框转换为数据坐标(我假设您的意思是数据坐标,而不是问题中的轴坐标),并使用它们创建左对齐文本。
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()