2017-01-06 6 views
1

私はy-ティッカーラベルを設定したいのですが、依然としてデータにバインドしています。この質問のmatplotlib: change yaxis tick labelsを介して、私はmatplotlib.tickerでこれをやろうとしています。Matplotlibを設定するmatplotlib.tickerを使ってytickラベルを設定すると、キーエラーが発生します

現在のところ、目盛りの位置は、3つの位置:[.25, .5, .75]です。グラフは正しく生成されますが、printステートメントでは、各ラベルを2回繰り返し、辞書にはないその他のランダムな値が表示され、この行にキーエラーが生成されます:return label_lookup[x]。値は毎回同じようには見えません。この問題の原因は何ですか?

import matplotlib as mpl 
import matplotlib.pyplot as plt 

label_lookup = {.25: 'Label 1', 
       .5: 'Label 2', 
       .75: 'Label 3'} 

def mjrFormatter(x, pos): 
    print x, pos 
    return label_lookup[x] 

ax = plt.gca() 
ax.set_yticks([.25,.5,.75], minor=False) 
ax.yaxis.set_major_formatter(mpl.ticker.FuncFormatter(mjrFormatter)) 
plt.draw() 
plt.show() 

答えて

2

私は自分自身matplotlibのでは専門家ではないんだけど、あなたの代わりにFuncFormatterのFixedFormatterを使用することにしたいように見えます。 FixedFormatterは、関数の代わりに文字列を取り、適切なラベルを出力します。 FixedFormatterを使用することにより、FuncFormatterで、あなたが渡されたすべてのxのための有効な値を持っている必要がありながら、あなただけの、あなたの3つのラベルを必要とする。

単に

ax.yaxis.set_major_formatter(mpl.ticker.FixedFormatter(['Label 1', 'Label 2', 'Label 3'])) 

ax.yaxis.set_major_formatter(mpl.ticker.FuncFormatter(mjrFormatter)) 

を置き換えますあなたはKeyErrorsなしで同じ結果を得るでしょう。あなたはもはやそれを使用していないので、mjrFormatterを取り除くことができます。

また、実際にFuncFormatterを使用する場合は、0.25,0.5、および0.75の正確な値だけでなく、任意のxを受け入れることができなければなりません。次のようにmjrFormatterを書き換えることができます:

def mjrFormatter(x, pos): 
    print x, pos 
    if x <= .25: 
     return 'Label 1' 
    if x <= .5: 
     return 'Label 2' 
    return 'Label 3' 

あなたの辞書label_lookupは、物事を行うには理想的な方法として私を打つことはありません。あなたは十分な努力でそれを動作させることができますが、辞書の順序付けされていない性質は、不平等チェックの単純な連鎖を持つことを難しくします。そのため、値をハードコードしました。

+0

ありがとう、あなたの単純な置換は 'FixedFormatter'で素晴らしいです。本当に簡単! – user2242044

関連する問題