Python Matplotlib中重复的记号标签

Python Matplotlib中重复的记号标签,python,matplotlib,Python,Matplotlib,我正在寻找一种从matplotlibfigure中提取所有文本元素的方法,包括它们的位置、样式、对齐方式等。调用figure的findobj(matplotlib.text.text)方法正好完成这项工作。然而,我得到了一些奇怪的重复所有的记号标签,我不知道如何处理它们 例如,使用findobj打印轴的所有文本元素: import matplotlib import pylab as p p.plot([1,2,3]) p.xticks([1],["tick"]) ax = p.gca() f

我正在寻找一种从matplotlibfigure中提取所有文本元素的方法,包括它们的位置、样式、对齐方式等。调用figure的
findobj(matplotlib.text.text)
方法正好完成这项工作。然而,我得到了一些奇怪的重复所有的记号标签,我不知道如何处理它们

例如,使用
findobj
打印轴的所有文本元素:

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)
请注意,所有记号标签的重复项都位于轴的末端。为什么?如何从文本元素列表中筛选出它们?它们的
get\u visible()
属性为True

另一件事是,我首先必须调用
draw()
,以更新/生成刻度。如何强制更新勾号标签
matplotlib.colorbar.colorbar
似乎有一个
update\u ticks()
方法,但我在轴上找不到类似的标记

我还尝试编写一个custum后端,并从
draw\u text()
渲染器的方法。与文档相比,
draw\u text()
does 未收到包含所有必要信息的
matplotlib.text.text
实例
信息,但只有一个简单的字符串和一个预先布局的位置。

这个问题的答案在matplotlib邮件列表中给出。Tick对象始终创建两个文本标签,一个用于左/下,一个用于右/上。绘制勾号艺术家时,其
label1On
label2On
属性定义两个子文本标签中的哪一个接收
draw()
调用。但是,它们都保持可见状态

因此,在遍历图形的所有文本元素之前,我隐藏了那些不应该看到的标签:

for tick in fig.findobj(matplotlib.axis.Tick):
    tick.label1.set_visible(tick.label1On)
    tick.label2.set_visible(tick.label2On)

for text in fig.findobj(match=Text, include_self=False):
    s = text.get_text()
    if not s or not text.get_visible(): continue
    # do something with the texts

不管它值多少钱,你在邮件列表上可能会有更多的运气。我正在尝试为(xe)latex编写一个后端,它将图形和文本元素分开,就像inkscape在保存到pdf时所做的那样。这样,文本的字体将遵循您在文档中使用的任何字体,而无需重新创建图形。哦,也可以使用nabble在邮件列表中发布,但邮件出现在列表上需要2-3个小时。这在一定程度上使我困惑,我在这里提出了这个问题。。