キャンバスを分割したい(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_ratios
とheight_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種類の散布図をそれぞれのキャンパスに描いています。
axs
は2x3の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])