我正在寻找一种从 matplotlibfigure 中提取所有文本元素的方法,包括它们的位置、样式、对齐方式等。调用findobj(matplotlib.text.Text)
图形的方法完全可以完成这项工作。但是,我对所有刻度标签都有一些奇怪的重复,我不知道如何处理它们。
例如,findobj
用于打印轴的所有 Text 元素:
import matplotlib
import pylab as p
p.plot([1,2,3])
p.xticks([1],["tick"])
ax = p.gca()
fig = p.gcf()
p.draw()
def print_texts(artist):
for t in artist.findobj(matplotlib.text.Text):
if t.get_visible() and t.get_text():
print " %r @ %s" % (t.get_text(), t.get_position())
print "X-Axis Text Elements:"
print_texts(ax.xaxis)
print "Y-Axis Text Elements:"
print_texts(ax.yaxis)
结果:
X-Axis Text Elements:
'tick' @ (1.0, 0.0)
'tick' @ (0.0, 1.0)
Y-Axis Text Elements:
u'1.0' @ (0.0, 1.0)
u'1.0' @ (1.0, 0.0)
u'1.5' @ (0.0, 1.5)
u'1.5' @ (1.0, 0.0)
u'2.0' @ (0.0, 2.0)
u'2.0' @ (1.0, 0.0)
u'2.5' @ (0.0, 2.5)
u'2.5' @ (1.0, 0.0)
u'3.0' @ (0.0, 3.0)
u'3.0' @ (1.0, 0.0)
请注意,所有刻度标签在轴的末端都有重复。为什么?如何从 Text 元素列表中过滤掉它们?他们的get_visible()
属性是True。
另一件事是我首先必须调用draw()
才能更新/生成刻度。如何强制更新刻度标签?matplotlib.colorbar.Colorbar
似乎有一种update_ticks()
方法,但我在轴上找不到类似的滴答声。
我还尝试编写一个自定义后端并从draw_text()
渲染器的方法中获取所有文本。与文档相反,draw_text()
它没有收到matplotlib.text.Text
包含所有必要信息的实例,而只有一个简单的字符串和一个预先布局的位置。