軸番号は、指定されたに従って定義され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を再起動することを忘れないでください。