2013-02-08 26 views
25

軸の目盛りラベルの形式に問題があります。matplotlib軸ラベル形式

ax1.ticklabel_format(style = 'sci', useOffset=False) 

、それに科学的なフォーマットを入れてみましたが、私が得るすべては次のとおりです:

0.00355872 

が、私はのようなものを期待:

3.55872...E-2 

または私はY_AXISからのオフセットを無効に類似。

私が本当にしたいことは何かのように:

3.55872... (on the tick label) 
x 10^2 (or something similar - on the axis label) 

私はstaticとしてラベルを設定しようとすることができ,,しかし、最後に、私は数十または異なる値を持つプロットの数百を持っていますので、動的に設定する必要があります。

代わりに、y_axisオフセットをラベルとして配置することもできますが、これを行う方法についての手がかりもありません。

答えて

24

あなただけの可能性が科学的表記法にScalerFormatterスイッチが

権限を設定する電力制限(doc)

ax1.xaxis.get_major_formatter().set_powerlimits((0, 1)) 

を微調整するか、あなたの可能性

にこれを行うには、いくつかの方法があります。 FuncFormatterを使用すると、十分な制御が得られます(しかし、足を吹き飛ばすことができます)。

from matplotlib import ticker 

scale_pow = 2 
def my_formatter_fun(x, p): 
    return "%.2f" % (x * (10 ** scale_pow)) 
ax1.get_xaxis().set_major_formatter(ticker.FuncFormatter(my_formatter_fun)) 
ax1.set_xlabel('my label ' + '$10^{{{0:d}}}$'.format(scale_pow)) 

FuncFormatter(doc)文字列を返すとラベルをフォーマットするためにその機能を使用して2引数の機能を取ります。 (これは、インタラクティブな図の隅に値がどのように表示されるかを変えることに注意してください)。 2番目の引数は、 'position'のためのもので、フォーマッタがラベルを作るときに渡される引数です。あなたは安全にそれを無視することができますが、それを取る必要があります(他の賢明な引数の数からエラーが発生します)。これは、すべてのフォーマッタの統一されたAPIと、インタラクティブにマウスの位置を表示するためのフォーマッタを使用した結果です。

+0

FuncFormatterを使用していますが、 'ax1.get_yaxis()。set_major_formatter(ticker.FuncFormatter(lambda x、p: "%2f"%(x *(10 ** scale_pow))))​​) 'ただ2,3の疑問:私はまだ「ラムダ」と「p」が何かを理解していません。どうもありがとう! :) – jorgehumberto

+0

私は 'FuncFormatter'が2つの引数を持つ関数を望んでいると思います。 'lambda x、p:do something'は2つの引数(' x'と 'p')を受け取り、必要な操作を実行する関数を作成します。 [チュートリアルについてはこちらをご覧ください](http://www.secnetix.de/olli/Python/lambda_functions.hawk) –

+0

@jorgehumberは 'lambda'を削除し、' p'について少し説明を追加しました。 'lambda'は' def'を使って関数を作る単なる方法ですが、これは実際にこの答えに必要ないファンシーパンツのpythonです。必要以上に複雑にして申し訳ありません。 – tacaswell

33

また軸と閾値制限を指定すべきである:図は[0.01, 99]範囲外である場合

ax1.ticklabel_format(axis='y', style='sci', scilimits=(-2,2)) 

これは、Y軸上SCIフォーマットを使用します。

+1

シンプルで私のために働いた、+1 – user3208430

関連する問題