Pynote

Python、機械学習、画像処理について

matplotlib - x 軸、y 軸のスケールを設定する方法について

関連

スケール

スケールとは、x 軸、y 軸の目盛りが配置される間隔である。
デフォルトでは線形スケールであるが、指数関数的に増加するような値をプロットする場合は対数スケールにしたほうが見やすくできる。

線形スケール

線形スケールの場合、等間隔に目盛りが配置される。

x = np.linspace(-5, 5, 100)

fig, ax = plt.subplots()
ax.plot(x, x)
ax.set_yscale('linear')
ax.set_title('linear')
ax.grid()


対数スケール

対数スケールの場合、指数的に等間隔に目盛りが配置される。

x = np.linspace(0, 1, 100)

fig, ax = plt.subplots()
ax.plot(x, x)
ax.set_yscale('log')
ax.set_title('log')
ax.grid()

デフォルトでは、基数は10となっているが、basex, basey 引数で変更できる。

x = np.linspace(0, 1, 100)

fig, ax = plt.subplots()
ax.plot(x, x)
ax.set_yscale('log', basey=2)
ax.set_title('log')
ax.grid()|<

<span itemtype="http://schema.org/Photograph" itemscope="itemscope"><img class="magnifiable" src="https://lh3.googleusercontent.com/-NPNnlciMk4s/XHovzk6Qe1I/AAAAAAAACTc/x9BJZX-keLItWRlnhZjeZaR9aqVzUfvRQCE0YBhgL/s1024/matplotlib-scale_03.png" itemprop="image"></span>

nonposx, nonposy で正でない値をどのように扱うかを指定できる。

- 'clip': 正でない値は0に近い正の値にクリップして表示する。
- 'mask': 正でない値は無効な値として表示しない。

>|python|
import matplotlib.pyplot as plt

x = np.linspace(0, 1, 100)
y = np.linspace(-1, 1, 100)

params = ['mask', 'clip']
fig = plt.figure(figsize=(5, 8))
fig.subplots_adjust(hspace=0.5)
for i, p in enumerate(params, 1):
    ax = fig.add_subplot(3, 1, i)
    ax.plot(x, y)
    ax.set_yscale('log', nonposy=p)
    
    s = "'{}'".format(p) if isinstance(p, str) else p
    ax.set_title("nonposy={}".format(s))
    ax.grid()

plt.show()


対称な対数スケール

'symlog' スケールの場合、[-linthreshy, linthreshy] の範囲は線形スケール、それ以外の範囲を対数スケールで表示する。

x = np.linspace(-10, 10, 1000)

fig, ax = plt.subplots()
ax.plot(x, x)
ax.set_yscale('symlog', linthreshy=2)
ax.set_xticks(np.arange(-10, 11, 2))
ax.grid()
plt.show()


対数スケールで折れ線グラフを作成するヘルパー関数

  • pyplot.loglog: x 軸、y 軸を対数スケールにして折れ線グラフを作成する。
  • axes.Axes.loglog: x 軸、y 軸を対数スケールにして折れ線グラフを作成する。
  • pyplot.semilogx: x 軸を対数スケール、y 軸を線形スケールにして折れ線グラフを作成する。
  • axes.Axes.semilogx: x 軸を対数スケール、y 軸を線形スケールにして折れ線グラフを作成する。
  • pyplot.semilogy: x 軸を線形スケール、y 軸を対数スケールにして折れ線グラフを作成する。
  • axes.Axes.semilogy: x 軸を線形スケール、y 軸を対数スケールにして折れ線グラフを作成する。

x 軸、y 軸を対数スケールにして折れ線グラフを作成する。

pyplot,loglog は、x 軸、y 軸を対数スケールにして折れ線グラフを作成するヘルパー関数である。

x = np.linspace(0, 2**20, 1000)

fig, ax = plt.subplots(figsize=(5, 5))
ax.loglog(x, x)

plt.show()

basex, basey, nonposx, nonposy は同様に指定できる。

x = np.linspace(0, 2**20, 1000)

fig, ax = plt.subplots(figsize=(5, 5))
ax.loglog(x, x, basex=2, basey=2)

plt.show()


x 軸を対数スケール、y 軸を線形スケールにして折れ線グラフを作成する。

pyplot,semilogx は、x 軸を対数スケール、y 軸を線形スケールにして折れ線グラフを作成するヘルパー関数である。

x = np.linspace(-5, 5, 100)

fig, ax = plt.subplots(figsize=(5, 5))
ax.semilogx(x, x)
ax.semilogx(np.exp(x), x)

plt.show()


x 軸を線形スケール、y 軸を対数スケールにして折れ線グラフを作成する。

pyplot,semilogy は、x 軸を線形スケール、y 軸を対数スケールにして折れ線グラフを作成するヘルパー関数である。

x = np.linspace(0, 10, 100)

fig, ax = plt.subplots(figsize=(5, 5))
ax.semilogy(x, x)
ax.semilogx(x, np.exp(x))

plt.show()