27

軸の目盛りラベルのフォーマットに問題があります。y_axisからのオフセットを無効にしました。

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

科学的な形式にしようとしましたが、私が得るのは次のとおりです。

0.00355872

しかし、私は次のようなものを期待していました:

3.55872...E-2

または類似。

私が本当に欲しいのは次のようなものです:

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

ラベルを静的に設定することもできますが、最終的には、値が異なる数十または数百のプロットが作成されるため、動的に設定する必要があります。

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

4

2 に答える 2

35

軸としきい値の制限も指定する必要があります。

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

これは、図が範囲外の場合、 y軸にsci形式を使用し[0.01, 99]ます。

于 2013-10-04T07:47:35.393 に答える
25

これを行うにはいくつかの方法があります

電力制限を微調整するだけです(doc)

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

ScalerFormatter科学的記数法に切り替える力を設定します

または、FuncFormatterかなりの制御が可能なaを使用することもできます(ただし、足を吹き飛ばすことはできます)。

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と、インタラクティブでマウスの位置を表示するためにフォーマッターを使用した結果です。

于 2013-02-08T15:05:51.163 に答える