Pynote

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

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

公式リファレンス

サンプル

スケール

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

線形スケール

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

import matplotlib.pyplot as plt
import numpy as np

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

fig, ax = plt.subplots(facecolor="w")
ax.set_title("linear")
ax.set_yscale("linear")
ax.grid()
ax.plot(x, x)

plt.show()


対数スケール

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

import matplotlib.pyplot as plt
import numpy as np

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

fig, ax = plt.subplots(facecolor="w")
ax.set_title("log")
ax.set_yscale("log")
ax.grid()
ax.plot(x, x)

plt.show()

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

import matplotlib.pyplot as plt
import numpy as np

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

fig, ax = plt.subplots(facecolor="w")
ax.set_title("log")
ax.set_yscale('log', basey=2)
ax.grid()
ax.plot(x, x)

plt.show()
|<

<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
import numpy as np

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

fig = plt.figure(figsize=(5, 8), facecolor="w")
fig.subplots_adjust(hspace=0.5)

for i, p in enumerate(["mask", "clip"], 1):
    ax = fig.add_subplot(3, 1, i)
    ax.set_yscale("log", nonposy=p)
    ax.grid()

    s = f"'{p}'" if isinstance(p, str) else p
    ax.set_title("nonposy={}".format(s))

    ax.plot(x, y)

plt.show()


対称な対数スケール

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

import matplotlib.pyplot as plt
import numpy as np

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

fig, ax = plt.subplots(facecolor="w")
ax.set_title("log")
ax.set_xticks(np.arange(-10, 11, 2))
ax.set_yscale("symlog", linthreshy=2)
ax.grid()
ax.plot(x, x)

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 軸を対数スケールにして折れ線グラフを作成するヘルパー関数である。

import matplotlib.pyplot as plt
import numpy as np

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

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

plt.show()

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

import matplotlib.pyplot as plt
import numpy as np

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 軸を線形スケールにして折れ線グラフを作成するヘルパー関数である。

import matplotlib.pyplot as plt
import numpy as np

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

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

plt.show()


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

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

import matplotlib.pyplot as plt
import numpy as np

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

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

plt.show()