我正在尋找一種方法來從matplotlibfigure中提取所有文本元素,包括它們的位置,樣式,對齊方式等。調用圖形的findobj(matplotlib.text.Text)
方法完全可以完成這項工作。但是,我爲所有的刻度標籤得到了一些奇怪的副本,我不知道如何處理它們。Matplotlib中的重複刻度標籤
例如,使用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_visible()
屬性爲True。
另一件事是,我首先必須撥打電話draw()
以更新/生成滴答。我如何強制更新刻度標籤? matplotlib.colorbar.Colorbar
似乎有一個update_ticks()
方法,但我找不到類似的蜱軸上。
我也嘗試編寫一個custum後端,並從渲染器的draw_text()
方法中獲取所有文本。與文檔draw_text()
相比, 沒有收到帶有所有必需的 信息的matplotlib.text.Text
實例,但只有簡單的字符串和預先佈置的位置。
不管它是值得的,你可能有更多的運氣與此有關的郵件列表。 –
我正試圖爲(xe)乳膠書寫一個後端,它將圖像和文本元素(如inkscape)分開保存爲pdf時可選。這樣,文本的字體將跟隨您在文檔中使用的任何字體,而無需重新創建圖形。 – pwuertz
哦,也發佈在郵件列表使用nabble但消息花了2-3小時,直到他們出現在名單上。這讓我感到困惑,我在這裏提出了這個問題。 – pwuertz