Pynote

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

matplotlib - sharex, sharey で x 軸、y 軸を複数のグラフで共有する

概要

matplotlib で subplot を作成する際に sharex, sharey で x 軸、y 軸を複数のグラフで共有するかどうかを指定するについて紹介する。

関連記事

pynote.hatenablog.com

sharex, sharey

matplotlib では subplots を作成した際に複数の axes 間で x 軸、y 軸を共有することができる。

pyplot.subplots, Figure.subplots の引数で指定する。

以下の関数でグリッド状の subplots を作成する際に引数で sharex, sharey 引数で x 軸、y 軸を共有するかどうかを指定できる。

引数は次の通りである。

  • False / 'none': 軸を共有しない。
  • True / 'all' すべての axes で軸を共有する。
  • 'row': 同じ行の axes で軸を共有する。
  • 'col': 同じ列の axes で軸を共有する。

sharex で x 軸を共有するかどうかを指定する。

import numpy as np
import matplotlib.pyplot as plt

x1 = np.linspace(0, 5, 100)
x2 = np.linspace(0, np.pi * 2, 100)

for p in ['none', 'all', 'row', 'col']:
    fig, ax = plt.subplots(2, 2, sharex=p, figsize=(6, 6))
    fig.suptitle("sharex='{}'".format(p), y=0.92)
    ax[0, 0].plot(x1, x1)
    ax[0, 1].plot(x1, np.abs(x))
    ax[1, 0].plot(x2, np.sinh(x2))
    ax[1, 1].plot(x2, np.cosh(x2))

plt.show()


sharey で y 軸を共有するかどうかを指定する。

import numpy as np
import matplotlib.pyplot as plt

x1 = np.linspace(0, 5, 100)
x2 = np.linspace(0, np.pi * 2, 100)

for p in ['none', 'all', 'row', 'col']:
    fig, ax = plt.subplots(2, 2, sharey=p, figsize=(6, 6))
    fig.suptitle("sharey='{}'".format(p), y=0.92)
    ax[0, 0].plot(x1, x1)
    ax[0, 1].plot(x1, np.abs(x))
    ax[1, 0].plot(x2, np.sinh(x2))
    ax[1, 1].plot(x2, np.cosh(x2))

plt.show()


pyplot.subplot, Figure.add_subplot の引数で指定する。

以下の関数で Axes を作成する際に sharex, sharey 引数に x 軸、y 軸を共有する Axes を指定する。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, np.pi * 4)

fig = plt.figure()
ax1 = fig.add_subplot(211)
ax1.plot(x, np.sin(x))
# ax1 と x 軸、y 軸を共有する。
ax2 = fig.add_subplot(212, sharex=ax1, sharey=ax1)
ax2.plot(x, np.cos(x))

plt.show()