1. ホーム
  2. python

[解決済み] Matplotlib の pyplot 軸フォーマッタ

2022-02-17 20:10:39

質問

画像があります。

ここで、Y軸に表示したいのは 5x10^-5 4x10^-5 などの代わりに 0.00005 0.00004 .

これまで試したものは

fig = plt.figure()
ax = fig.add_subplot(111)
y_formatter = matplotlib.ticker.ScalarFormatter(useOffset=True)
ax.yaxis.set_major_formatter(y_formatter)

ax.plot(m_plot,densities1,'-ro',label='0.0<z<0.5')
ax.plot(m_plot,densities2, '-bo',label='0.5<z<1.0')


ax.legend(loc='best',scatterpoints=1)
plt.legend()
plt.show() 

これはうまくいかないようです。その ドキュメントページ のティッカーでは、直接的な回答は得られないようです。

どのように解決するのですか?

を使用することができます。 matplotlib.ticker.FuncFormatter のように、関数を使って目盛りの形式を選択します。事実上、この関数が行っていることは、入力(浮動小数点)を指数表記に変換し、「e」を「x10^」に置き換えて、希望するフォーマットを得ることだけです。

import matplotlib.pyplot as plt
import matplotlib.ticker as tick
import numpy as np

x = np.linspace(0, 10, 1000)
y = 0.000001*np.sin(10*x)

fig = plt.figure()
ax = fig.add_subplot(111)

ax.plot(x, y)

def y_fmt(x, y):
    return '{:2.2e}'.format(x).replace('e', 'x10^')

ax.yaxis.set_major_formatter(tick.FuncFormatter(y_fmt))

plt.show()

<イグ

しかし、もし指数表記(5.0e-6.0)を使いたいのであれば、もっと簡単な方法があります。 matplotlib.ticker.FormatStrFormatter を使って、以下のような書式文字列を選択します。文字列の書式は、Pythonの標準的な文字列書式規則で与えられます。

...

y_fmt = tick.FormatStrFormatter('%2.2e')
ax.yaxis.set_major_formatter(y_fmt)

...