1

所以我正在将三个不同的文本块写入一个图形:

第一个我想用粗体、大白字写:

texttitle = "My Figure"
fig.text(0.8, 0.8, texttitle, color = 'w', visible = True, linespacing = 2, weight = 'bold', size = 'large')

第二个粗体,正常的白色文本:

letters = "A:\nB:\nC:"
fig.text(0.8, 0.3, letters, color = 'w', visible = True, linespacing = 2, weight = 'bold')

第三个是正常的红色文本:

numbers = "1\n2\n3"
fig.text(0.9, 0.3, numbers, color = 'r', visible = True, linespacing = 2)

现在我必须调用 fig.text() 三次才能为不同的字符串获取不同的格式,因此我必须指定每个字符串的位置,确保它们对齐,这样我就得到了这样的结果:

我想知道有没有一种方法可以只使用一个 fig.text() 命令来做到这一点?或者有没有一种方法可以获得其他 fig.text() 调用的尺寸,以便我可以排列对 fig.text() 的下一个调用?

我正在使用带有 GTKagg 后端的 Mac OSX。

谢谢,詹姆斯

4

2 回答 2

4

相关的电话是

txt.get_window_extent()

iftxt是由 . 返回的文本对象plt.text

在获取范围之前绘制图形很重要,因为之前没有计算过。一个完整的例子是:

import matplotlib.pyplot as plt
from matplotlib.transforms import offset_copy

fig = plt.figure()
ax = plt.axes()
txt = plt.text(0.1,0.5,"My text", transform = ax.transAxes)

fig.canvas.draw()

text_bbox = txt.get_window_extent()
transform_for_second_text = offset_copy(ax.transAxes, fig, 
                                        x=text_bbox.width,
                                        units="dots")

plt.text(0.1,0.5, "Second text", transform=transform_for_second_text, color="r")

plt.show()

导致:

输出

请注意,这fig.canvas.draw()是一个非常昂贵的操作,所以不要太频繁地这样做,例如,首先创建所有白色文本,然后绘制图形画布,然后创建所有红色文本。

于 2013-10-23T12:10:26.993 回答
2

您可以使用http://matplotlib.org/users/mathtext.html#mathtext-tutorial来哄骗这种格式

然后,您可以创建一个可以具有不同字体大小等的长乳胶字符串……我不确定您是否也可以控制颜色。

于 2013-10-23T13:44:45.057 回答