キャンバスを分割したい(matplotlib.pyplot.subplots

1import matplotlib.pyplot as plt
2fig, axs = plt.subplots(1, figsize=(4, 4))
3
4data.plot.scatter(x="time", y="v1", ax=axs, c="blue")
5data.plot.scatter(x="time", y="v2", ax=axs, c="red")

plt.subplotsでキャンバスを作成できます。 返り値はFigureオブジェクトとAxesオブジェクトです。

squeeze=Falseオプションで、返ってくるAxesオブジェクト(axs)を常に2次元配列にできます。

width_ratiosheight_rationsオプションで 列幅の比、行高の比を変更できます。

複数に分割したい

 1import matplotlib.pyplot as plt
 2
 3fig, axs = plt.subplots(2, 3, figsize=(8, 12))
 4canvas = axs.ravel()  # 1次元配列に変換
 5
 6data.plot.scatter(x="time", y="v1", ax=canvas[0])
 7data.plot.scatter(x="time", y="v2", ax=canvas[1])
 8data.plot.scatter(x="time", y="v3", ax=canvas[2])
 9data.plot.scatter(x="time", y="v4", ax=canvas[3])
10data.plot.scatter(x="time", y="v5", ax=canvas[4])
11data.plot.scatter(x="time", y="v6", ax=canvas[5])
12
13fig.savefig("ファイルに保存.png")

plt.subplotsの引数を指定してキャンパスを分割できます。

上のサンプルはpandasの散布図と組み合わせたものにしてみました。 2x3の6分割にし、6種類の散布図をそれぞれのキャンパスに描いています。

axs2x3の2次元配列になっていますが、 axs.ravelを使って1次元配列に変換しています。 順番にループ処理して描画する場合は1次元配列に変換しておくと便利です。

注釈

axsを2次元配列のまま使ったサンプルです。

1data.plot.scatter(x="time", y="v1", ax=axs[0][0])
2data.plot.scatter(x="time", y="v2", ax=axs[0][1])
3data.plot.scatter(x="time", y="v3", ax=axs[0][2])
4data.plot.scatter(x="time", y="v4", ax=axs[1][0])
5data.plot.scatter(x="time", y="v5", ax=axs[1][1])
6data.plot.scatter(x="time", y="v6", ax=axs[1][2])

リファレンス