6

重複の可能性:
matplotlib軸の相対シフトを削除する方法

日付に対して5桁(210.10、210.25、211.35など)の数値をプロットしていますが、y軸の目盛りにすべての桁(「0.20 + 2.14e2」ではなく「214.20」)を表示させたいのですが、これを理解することができました。ティックラベルの形式をプレーンに設定しようとしましたが、効果がないようです。

plt.ticklabel_format(style='plain', axis='y')

私が見逃している明らかなヒントはありますか?

4

2 に答える 2

14

軸番号は、指定されたに従って定義されFormatterます。残念ながら(AFAIK)、matplotlibは、数値からより小さな数値+オフセットに移行するためのしきい値を制御する方法を公開していません。ブルートフォースアプローチでは、すべてのxtick文字列を設定します。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(100, 100.1, 100)
y = np.arange(100)

fig = plt.figure()
plt.plot(x, y)
plt.show()  # original problem

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

# setting the xticks to have 3 decimal places
xx, locs = plt.xticks()
ll = ['%.3f' % a for a in xx]
plt.xticks(xx, ll)
plt.show()

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

これは、実際には、文字列を使用してFixedFormatterを設定するのと同じです。

from matplotlib.ticker import FixedFormatter
plt.gca().xaxis.set_major_formatter(FixedFormatter(ll))

ただし、このアプローチの問題は、ラベルが固定されていることです。プロットのサイズ変更/パンを行う場合は、最初からやり直す必要があります。より柔軟なアプローチは、FuncFormatterを使用することです。

def form3(x, pos):
    """ This function returns a string with 3 decimal places, given the input x"""
    return '%.3f' % x

from matplotlib.ticker import FuncFormatter
formatter = FuncFormatter(form3)
gca().xaxis.set_major_formatter(FuncFormatter(formatter))

これで、プロットを移動しても同じ精度を維持できます。しかし、これが理想的でない場合もあります。常に一定の精度が必要なわけではありません。デフォルトのフォーマッターの動作を維持したいのですが、オフセットの追加を開始するときまでしきい値を上げるだけです。このための公開されたメカニズムはないので、私がやることはソースコードを変更することです。非常に簡単です。で1行の1文字を変更するだけticker.pyです。そのgithubバージョンを見ると、497行目にあります。

if np.absolute(ave_oom - range_oom) >= 3:  # four sig-figs

私は通常それを次のように変更します:

if np.absolute(ave_oom - range_oom) >= 5:  # four sig-figs

そしてそれが私の使用のためにうまくいくことを見つけてください。matplotlibインストールでそのファイルを変更し、有効になる前にpythonを再起動することを忘れないでください。

于 2013-01-21T16:17:13.163 に答える
7

オフセットをオフにすることもできます:( matplotlib軸の相対シフトを削除する方法のほぼ正確なコピー)

import matlplotlib is plt

plt.plot([1000, 1001, 1002], [1, 2, 3])
plt.gca().get_xaxis().get_major_formatter().set_useOffset(False)
plt.draw()

これにより、現在axesのが取得され、x軸axisオブジェクトが取得され、次にメジャーフォーマッタオブジェクトが取得さuseOffsetれ、falseに設定されます(doc)。

于 2013-01-21T17:24:20.183 に答える