Pynote

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

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

概要

matplotlib の subplots(), subplot(), add_subplot() で1つの図に複数のグラフを作成するとき、引数 sharex, sharey を指定して、x 軸、y 軸を複数のグラフで共有する方法について紹介する。

sharex, sharey

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

pyplot.subplots() または Figure.subplots で格子状に複数のグラフを作成する際に、引数 sharex, sharey で x 軸、y 軸を共有するかどうかを次の値から指定できる。

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

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

引数 sharex で x 軸の共有方法を指定できる。

import matplotlib.pyplot as plt
import numpy as np

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), facecolor="w")
    fig.suptitle("sharex='{}'".format(p), y=0.92)

    ax[0, 0].plot(x1, x1)
    ax[0, 1].plot(x1, np.abs(x1))
    ax[1, 0].plot(x2, np.sinh(x2))
    ax[1, 1].plot(x2, np.cosh(x2))

plt.show()

sharex="none" の場合、x 軸の共有は行わない。

sharex="all" の場合、すべてのグラフで x 軸が共有されている。

sharex="row" の場合、1行1列目と1行2列目のグラフ、2行1列目と2行2列目のグラフはそれぞれ1つの x 軸が共有されている。

sharex="col" の場合、1行1列目と2行1列目のグラフ、1行2列目と2行2列目のグラフはそれぞれ1つの x 軸が共有されている。

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

引数 sharey で y 軸の共有方法を指定できる。

import matplotlib.pyplot as plt
import numpy as np

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), facecolor="w")
    fig.suptitle("sharey='{}'".format(p), y=0.92)

    ax[0, 0].plot(x1, x1)
    ax[0, 1].plot(x1, np.abs(x1))
    ax[1, 0].plot(x2, np.sinh(x2))
    ax[1, 1].plot(x2, np.cosh(x2))

plt.show()

sharey="none" の場合、y 軸の共有は行わない。

sharey="all" の場合、すべてのグラフで y 軸が共有されている。

sharey="col" の場合、1行1列目と1行2列目のグラフ、2行1列目と2行2列目のグラフはそれぞれ1つの y 軸が共有されている。

sharey="col" の場合、1行1列目と2行1列目のグラフ、1行2列目と2行2列目のグラフはそれぞれ1つの y 軸が共有されている。

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

pyplot.subplot() または Figure.add_subplot() でグラフを作成するとき、sharex, sharey 引数に x 軸、y 軸を共有する Axes を指定する。
sharex, sharey の指定方法は subplots() の場合と同じである。

import matplotlib.pyplot as plt
import numpy as np

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()