2016-12-13 7 views
9

hereと同様の問題が発生しています。目盛りラベルのテキストが空の文字列である理由私は理解していない:Matplotlibでプロットを表示する前に空の目盛りラベルを取得する

import numpy as np 
import matplotlib.pyplot as plt 

x = np.linspace(0,2*np.pi,100) 
y = np.sin(x)**2 

fig, ax = plt.subplots() 
ax.plot(x,y) 

labels = ax.get_xticklabels() 
for label in labels: 
    print(label) 

plt.show() 

出力:

Text(0,0,'') 
Text(0,0,'') 
Text(0,0,'') 
Text(0,0,'') 
Text(0,0,'') 
Text(0,0,'') 
Text(0,0,'') 
Text(0,0,'') 

を私はax.xaxis.get_ticklabels()と同じ結果を得るが、プロットされたグラフは、x軸上の8つのラベルティックを示し軸を保存または表示します。しかし、の後にのラベルを表示すると、プロットが表示され、labelsリストに正しく入力されます。もちろん、それらを変更することについて何かするのは少し遅れています。

fig, ax = plt.subplots() 
ax.plot(x,y) 
plt.show() 

labels = ax.get_xticklabels() 
for label in labels: 
    print(label) 

出力:

Text(0,0,'0') 
Text(1,0,'1') 
Text(2,0,'2') 
Text(3,0,'3') 
Text(4,0,'4') 
Text(5,0,'5') 
Text(6,0,'6') 
Text(7,0,'7') 

なぜ、これは(Mac OS Xのヨセミテ、matplotlibの1.5.1)に起きず、どのように私は私が表示したり、私のプロットを保存する前に、私のラベルを得ることができますか?

+0

「xticklabels」を取得する目的は何ですか?あなたは 'ax.set_xticklabels([" 0 "、" 1 "])'(ちょっとした例)を使っていつも独自のカスタム 'xticklabels'を持つことができます。文字列のリストをラベルとして提供します。リストに文字列がない場合、残りの 'ticklabels'は空になります。 reference:http://matplotlib.org/api/axes_api.html#matplotlib.axes.Axes.set_xticklabels –

答えて

13

問題を正しく特定しました:plt.show()に電話する前に、何も明示的に設定されていません。これは、matplotlibがダックの静的な配置を避けるために、あなたがそれと対話したいと思うためです。例えば、ax.set_xlim()の場合があります。

あなたのケースでは、fig.canvas.draw()で図形キャンバスを描画してティックの位置をトリガーすることができます。その結果、値を取得できます。

また、明示的に軸をFixedFormatterFixedLocatorに設定し、同じ結果を得るxticksを設定することもできます。

import numpy as np 
import matplotlib.pyplot as plt 

x = np.linspace(0,2*np.pi,100) 
y = np.sin(x)**2 

fig, ax = plt.subplots() 

ax.plot(x,y) 
ax.set_xlim(0,6) 

# Must draw the canvas to position the ticks 
fig.canvas.draw() 
# Or Alternatively 
#ax.set_xticklabels(ax.get_xticks()) 

labels = ax.get_xticklabels() 
for label in labels: 
    print(label.get_text()) 

plt.show() 

Out: 
0 
1 
2 
3 
4 
5 
6 
関連する問題