位置、スタイル、配置などを含むすべてのテキスト要素を 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)
すべての目盛りラベルには、軸の端に重複が配置されていることに注意してください。なんで?テキスト要素のリストからそれらを除外する方法は? それらのget_visible()
属性は True です。
もう1つのことはdraw()
、ティックを更新/生成するために最初に呼び出しを行う必要があることです。目盛りラベルを強制的に更新するにはどうすればよいですか? matplotlib.colorbar.Colorbar
メソッドがあるようupdate_ticks()
ですが、軸の目盛りに似たものが見つかりません。
また、カスタム バックエンドを作成してdraw_text()
、レンダラーのメソッドからすべてのテキストを取得しようとしました。ドキュメントとは対照的に、必要なすべての情報を含むインスタンスをdraw_text()
受け取るのではmatplotlib.text.Text
なく、単純な文字列と事前にレイアウトされた位置のみを受け取ります。