2013-12-19 6 views
7

私はmatplotlibティックラベルを計算値で置き換える正しい方法は何ですか?

enter image description here

軸ログと数字を持っていると私は軸を再ラベル付けしたいと思い、値のログではなく、値そのもの

enter image description here

で道を刻みます私はこれを達成しました

plt.axes().set_xticklabels([math.log10(x) for x in plt.axes().get_xticks()]) 

これを行うにはあまり複雑でない方法はありません。

matplotlibのティックを組織的に再ラベル付けするための正しいイディオムは、元のティック値から計算された値を持つプロットですか?

+0

あなたは 'Formatter'を使用したくない場合は、あなただけの' plt.xticks(x_ticksを、使用することができますが事前に定義された 'x_ticklabels'を定義します。 – mikey

答えて

6

Formatterクラスを参照してください。ダニにテキストを入れない限り、set_xticklabelsまたはset_yticklabelsを直接使用することはほとんどありません。これにより、あなたの目盛りラベルはあなたから完全に分離されます。ビューの制限を調整すると、目盛りのラベルは変わりません。あなたがFuncFormatterを使用することができ、一般的に

fig, ax = plt.subplots() 
ax.loglog(np.logspace(0, 5), np.logspace(0, 5)**2) 
ax.xaxis.set_major_formatter(matplotlib.ticker.LogFormatterExponent()) 

matplotlib.ticker.LogFormatterExponent doc

:あなたのケースでは

、フォーマッタがすでにこのために存在します。 FuncFomatterの使用例については、matplotlib: change yaxis tick labelsを参照してください。コメントでJoeKingtonから正確に持ち上げる

何をしたいのための簡潔な例、,:

ax.xaxis.set_major_formatter(
    FuncFormatter(lambda x, pos: '{:0.1f}'.format(log10(x)))) 
+0

メモでは、 'LogFormatterExponent'にはいくつかの癖があります(例えば、負の値の科学記法に切り替える)。この場合、 'FuncFormatter'を使うのはちょっといいです。 OPの参照のために、 'FuncFormatter'は、値とその位置という2つの引数を取る関数を期待しています。例: 'FuncFormatter(lambda x、pos: '{:0.1f}'。書式(log10(x)))'。 –

+0

これは、整数ではなく、科学記法で負の指数をフォーマットします。また、(もっと重要なことに)私は、 'MatatterLib'プロットのダニを、通常は' Formatter 'がある場合だけでなく、オリジナルのティック値から計算された値で再定義するためのイディオムについて興味があります。 – orome

+0

@JoeKingtonハァッ、面白いです。私はこの質問に答えながら 'LogFormatterExponent'を発見しました。あなたはネガティブのためのその行動の理由を知っていますか? – tacaswell

関連する問題