subplotsでグラフを描画
subplots関数は複数のグラフの描画をする際に便利な関数で、各グラフの配置や軸の共通化設定をすることができます。
subplots関数は、以下のFigureオブジェクトとAxesオブジェクトを返します。
- Figure:グラフを描画するキャンバス全体のオブジェクト
- Axes:Figureオブジェクト内の個々のグラフのオブジェクト
以下に、4つのグラフを表示したときの例を示します。全体がFigreオブジェクトで、各グラフがAxesオブジェクトになります。

グラフ表示するデータの準備
まずは、グラフに表示させるデータを準備します。
import matplotlib.pyplot as plt import numpy as np x = np.linspace(0, 2*np.pi, 400) y = np.sin(x**2)
公式ドキュメントのチュートリアルと同じデータです。このデータを、subplotsを用いて図示していきます。
グラフを一つ表示
subplotsを用いてFigureオブジェクトとAxesオブジェクトを生成し、グラフを表示させます。
fig, ax = plt.subplots() ax.plot(x,y)
出力:

横に2つのグラフを並べて表示
横方向に複数のグラフを並べて表示するには、subplotsのncolsオプションで表示させるグラフの数を設定します。
先ほどの例ではsubplotからFigureオブジェクトとAxesオブジェクトが返されましたが、複数グラフを生成する場合はAxesオブジェクト自体ではなく、Axesオブジェクトのリストが返されます。そのため、個々のAxesオブジェクトにはAxes[0]のような形でアクセスします。
fig, ax = plt.subplots(ncols=2) ax[0].plot(x, y) ax[1].scatter(x, y)
出力:

左右に二つのグラフを表示させることができました。
縦に2つのグラフを並べて表示
縦方向に複数のグラフを並べて表示するには、subplotsのnrowsオプションで表示させるグラフの数を設定します。
fig, ax = plt.subplots(nrows=2) ax[0].plot(x, y) ax[1].scatter(x, y)
出力:

上下に二つのグラフを表示させることができました。
縦横に4つのグラフを並べて表示
nrowsとncolsの両方を設定することで、縦横両方向にグラフを並べることもできます。
この場合、各axesオブジェクトにアクセスするには、axes[0,0]の様な形で指定します。
fig, ax = plt.subplots(nrows=2, ncols=2) ax[0, 0].plot(x, y) ax[0, 1].scatter(x, y) ax[1, 0].bar(x,y) ax[1, 1].fill(x,y)
出力:

4つのグラフを表示させることができました。
また、nrowsとncolsは明示する必要はないため、以下の様に記述しても問題ありません。 但し、必ずnrows→ncolsの順番にする必要はあります。
fig, ax = plt.subplots(2, 2)
各グラフ間で軸を共有
sharexオプション、shareyオプションを用いて、subplotsで表示した複数グラフ間の軸を共有することができます。
以下の例で使用するデータは、グラフ描画の例と同じものを利用しています。
x軸を共有
すべてのグラフ間でx軸を共有にするには、subplotsのsharexオプションをTrueに設定します。
fig, ax = plt.subplots(ncols=2, sharex=True) ax[0].plot(2*x, y) ax[1].plot(x, y)
出力:

すべてのグラフのx軸が共有になりました。
y軸を共有
すべてのグラフ間でy軸を共有にするには、subplotsのshareyオプションをTrueに設定します。
fig, ax = plt.subplots(ncols=2, sharey=True) ax[0].plot(x, 2*y) ax[1].plot(x, y)
出力:

すべてのグラフのy軸が共有になりました。
横方向に並べたグラフの軸を共有
横方向に並べたグラフの軸を共有にするには、subplotsのsharexまたはshareyオプションをrowに設定します。
fig, ax = plt.subplots(2, 2, sharex="row") ax[0, 0].plot(x, y) ax[0, 1].plot(2*x, y) ax[1, 0].plot(x, y) ax[1, 1].plot(3*x, 2*y)

左右のグラフのx軸を共有にすることができました。
縦方向に並べたグラフの軸を共有
縦方向に並べたグラフの軸を共有にするには、subplotsのsharexまたはshareyオプションをcolに設定します。
fig, ax = plt.subplots(2, 2, sharex="col") ax[0, 0].plot(x, y) ax[0, 1].plot(2*x, y) ax[1, 0].plot(x, 2*y) ax[1, 1].plot(2*x, 2*y)
出力:

上下のグラフのx軸を共有にすることができました。