matplotlibでx軸のスケールを変更する


93

Matlabを使用してこのプロットを作成しました

ここに画像の説明を入力してください

matplotlibを使用して、x軸は100000、200000、300000などの大きな数値を描画します。1、2、3、10 ^ 5のようにして、実際には100000、200000、300000であることを示します。

matplotlibでそのようなスケールを作成する簡単な方法はありますか?

回答:


145

使用してみてくださいmatplotlib.pyplot.ticklabel_format

import matplotlib.pyplot as plt
...
plt.ticklabel_format(style='sci', axis='x', scilimits=(0,0))

これはa x 10^b、x軸の目盛りに科学表記(つまり)を適用します。


9
オフセットを追加することは可能ですか?(たとえば、0.0、0.5、1.0、1.5、...、x 10 ^ bの代わりに、0、5、10、15、...、x 10 ^ {b-1}になります)
Eagle

24
ticklabel_formatは、Axesオブジェクトのメソッドでもあります。次のようなものを試すことができますax.ticklabel_format(style='sci', axis='x', scilimits=(0,0))
Covich

たとえば、2つのプロットのサブプロットがある場合、これはどのように機能しますか?
FaCoffee 2017

2
@イーグル申し訳ありませんが、オフセットの追加に関するフォローアップの質問は、私が言及していたものでした。私のx軸は[0.1, 0.2, ...][1, 2, ...]指数を調整したほうがいいです。その解決策を見つけることができましたか?
trianta2

私も質問trianta2に興味@Eagle言及
ベン・ウスマン

15

これは、元の質問に対する回答ではなく、質問の本文にあるクエリの1つに対する回答です。

私の命名が奇妙に見えないように、少し前文:

import matplotlib
from matplotlib import rc
from matplotlib.figure import Figure
ax = self.figure.add_subplot( 111 )

すでに述べたように、ticklabel_formatを使用して、matplotlibが大きい値または小さい値に対して科学表記法を使用するように指定できます。

ax.ticklabel_format(style='sci',scilimits=(-3,4),axis='both')

rcParamsのフラグ(matplotlib import rcParamsから)を使用するか、直接設定することで、これが表示される方法に影響を与えることができます。「1e」と「x10 ^」の科学的表記を切り替えるよりエレガントな方法は見つかりませんでした。

ax.xaxis.major.formatter._useMathText = True

これにより、より多くのMatlab-escが得られ、確かに見た目が間違いなく向上するはずです。私は次のことも同じようにするべきだと思います:

rc('text', usetex=True)

11

フォーマッタスカラー指数を集めるサポート。ドキュメントは次のとおりです。

クラスmatplotlib.ticker.ScalarFormatter(useOffset = True、useMathText = False、useLocale = None)ベース:matplotlib.ticker.Formatter

目盛りの位置は単純な古い数字です。useOffset == Trueで、データ範囲がデータ平均よりはるかに小さい場合、目盛りラベルが意味を持つようにオフセットが決定されます。科学表記法は、データ<10 ^ -nまたはデータ> = 10 ^ mに使用されます。nおよびmは、set_powerlimits((n、m))を使用して設定された電力制限です。これらのデフォルトは、axes.formatter.limits rcパラメーターによって制御されます。

あなたのテクニックは:

from matplotlib.ticker import ScalarFormatter
xfmt = ScalarFormatter()
xfmt.set_powerlimits((-3,3))  # Or whatever your limits are . . .
{{ Make your plot }}
gca().xaxis.set_major_formatter(xfmt)

指数をフォーマットx10^5で表示するには、でScalarFormatterをインスタンス化しuseMathText=Trueます。

アフターイメージ

あなたも使うことができます:

xfmt.set_useOffset(10000)

このような結果を得るには:

ここに画像の説明を入力してください


3
getを使用useMathText=TrueしてScalarFormatterをインスタンス化しますx10^4
ホフマン

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.