公式ドキュメント:
matplotlib.pyplot.subplots — Matplotlib 3.8.4 documentation
matplotlib.pyplot.subplots(nrows=1, ncols=1, *, sharex=False, sharey=False, squeeze=True, width_ratios=None, height_ratios=None, subplot_kw=None, gridspec_kw=None, **fig_kw)
引数
nrows, ncols:
int.デフォルト値: 1
それぞれ行数,列数を指定する.
sharex, sharey:
bool or {'none', 'all', 'row', 'col'}.デフォルト値: False
各図の間での
x軸,
y軸の共有を制御する.
squeeze:
bool.デフォルト値: True
戻り値の
axの型を制御する.行数または列数が
1の時,配列の対応する軸を消す.
Trueのとき:
1行
1列のとき,
axは単体の
Axesとなる.
1行
N列
(N>1)または
M行
1列
(M>1)のとき,
axはそれぞれ
Axesの長さ
Nまたは長さ
Mの配列となる.
Falseのとき:
N行
M列のとき,
axは形状
[N,M]の
Axesの配列となる.
N=1または
M=1のときも同様に動作する.
width_ratios:
長さncolsの配列様オブジェクト.オプショナル
列の幅の比率を指定する.各列の相対幅は
width_ratios[i] / sum(width_ratios).
height_ratios:
長さnrowsの配列様オブジェクト.オプショナル
行の高さの比率を指定する.
width_ratiosと同様.
subplot_kw:
dict. オプショナル
add_subplot APIにおいてキーワードで与えられるオプションを指定する.
subplot_gridspec:
dict. オプショナル
GridSpec APIにおいてキーワードで与えられるオプションを指定する.
**fig_kw
pyplot.figure APIで指定可能な引数をキーワードで指定する.
戻り値
fig:
Figure
ax:
AxesまたはAxesの配列
図全体に付ける
fig.supxlabel, fig.supylabelを使う.
文字の属性(大きさなど)や位置等の指定もできる.詳しくは公式ドキュメントを参照.
matplotlib.figure.supxlabel:
matplotlib.figure — Matplotlib 3.8.4 documentation
matplotlib.figure.supylabel:
matplotlib.figure — Matplotlib 3.8.4 documentation
(なんか
idタグが上手く機能しなくて目的の項目に飛ばないことがあるので,そういうときは
supxlabelで検索するなどしてください.辞書並びなので普通に上から探しても良いです)
左と下の図に付ける
方法1. plt.setpを使う
setpはラベル設定用の手続きではなくもっと汎用的な,描画オブジェクト(
Artistと呼ばれるもの)の属性情報を更新するもの.
詳細は公式ドキュメントに譲るとして,ここではとにかく
plt.subplotsで得られた
axを
plt.setpに与えてそれらの軸ラベルを更新する方法だけ述べる.
setp:
matplotlib.pyplot.setp
Artist:
matplotlib.artist — Matplotlib 3.8.4 documentation
方法2. 個別に設定する
plt.setpでは
Artist(ここでは
ax)が受け取れる属性情報しか指定できないので,軸ラベルの文字列は与えることができてもそのフォントサイズなどの指定は結局各
subplotごとに行うしかないらしい.
set_xlabel:
matplotlib.axes.Axes.set_xlabel — Matplotlib 3.8.4 documentation
参考:
python - How to set common axes labels for subplots - Stack Overflow
ここでは
pyplot.subplotsを使う.見せたいグラフはここまでと同じように
subplotsを作成してそれぞれ描画する.
もちろんカラーバーが共通なので,カラーマップや値の範囲の指定をきちんとする必要がある.
カラーバーを描くにはそれに対応する描画オブジェクトが必要である.ここでは
subplotsのいずれかになるわけだが,そうするとレイアウトの調整などがちょっとしづらくなるので,専用のオブジェクトを別に生成する.カラーバー用の軸は
figure.add_axesで生成する.
またグラフとカラーバーが重ならないようそれぞれの位置と大きさを設定する.いずれもオブジェクトを生成する際に行う.
pyplot.subplotsの
gridspec_kwでは
left, right, bottom, topで描画領域内での相対位置を指定する.
一方
figure.add_axesでは
left, bottom, width, heightの
tupleを引数に与える.つまり図の左端と下端の位置,及び幅と高さを描画領域に対する相対値として指定する.
このことを念頭に,オブジェクト同士が重ならないよう適切な値を設定する.この具体的な値は当然,カラーバーの向きや軸ラベルに取られるスペースなどによって変わるので,描画しつつ調整することになる.同じレイアウトの図を何度も作るなら良いが,そうでないなら結局のところパワポなどを使ってカラーバーだけ手動で付けるのが楽だと思う.
ScalarMappable:
matplotlib.cm — Matplotlib 3.8.4 documentation
figure.add_axes:
matplotlib.figure — Matplotlib 3.8.4 documentation
参考:
matplotlibの複数subplotで共通のカラーバーを表示する #matplotlib - Qiita