見出し画像

Python 複数のグラフを並べる

格子状にグラフを並べる


単純に複数のグラフを並べたい場合にはplt.subplots関数を使用する。この関数に並べたいグラフの行数と列数を指定すると、それに合わせてAxesが作成される。Axesはグラフの配置に合わせてNumPyの配列にまとめられており、各Axesにはインデキシングでアクセスできる。

スクリーンショット 2020-08-29 20.59.48

スクリーンショット 2020-08-29 21.00.25

ラベルやタイトルが描画領域の外に出てしまう場合などに、グラフの位置や大きさを調整したいことがある。plt.subplots関数にconstrained_layout=Trueかtight_layout=Trueと指定すると、グラフ同士の間隔やグラフ周りの余白が適切になるよう、レイアウトが自動的に調整される。 さらにグラフ同士の間隔などを調整したい場合はfig.set_constrained_layout_padsメソッドを使用する。グラフ同士の間隔はhspaceとwspace引数、グラフ周りの余白量はh_padとw_pad引数にインチ単位で指定する。

スクリーンショット 2020-08-29 21.01.01

グラフを2行以上に並べることもできる。この場合はaxs[0, 0]のように行と列のインデックスを指定してグラフを作成していく。sharexとsharey引数を使うことで、複数のグラフで目盛を共有させることができる。

スクリーンショット 2020-08-29 21.01.51

スクリーンショット 2020-08-29 21.02.12

複雑なレイアウト


plt.subplots関数では作成できないような、複雑なレイアウトでグラフを並べる方法。

fig.add_gridspecメソッドを呼び出すとGridSpecオブジェクトが作成される。一旦全体の領域を格子状に分割したと考え、その行数と列数を引数に指定する。この例では全体を2行3列に分割したと考える。さらに、分割した領域の大きさの比率をwidth_ratiosとheight_ratios引数で設定できる。 そして、作成したGridSpecオブジェクトを用いて、分割したどの領域を使ってグラフを作成するかを指定する。

スクリーンショット 2020-08-29 21.03.16

スクリーンショット 2020-08-29 21.03.36

plt.subplots関数でも各グラフの幅と高さの比率を設定できる。辞書としてwidth_ratiosやheight_ratiosの値をまとめ、それをgridspec_kw引数に渡す。

スクリーンショット 2020-08-29 21.04.14

スクリーンショット 2020-08-29 21.04.41

https://colab.research.google.com/drive/1MV-uD99Ykz4zx-L_cFLAVKX3m5IKTyZf?usp=sharing

この記事が気に入ったらサポートをしてみませんか?