[matplotlib] 79. inset_axesでカラーバーを自由自在に配置する

matplotlib

はじめに

matplotlibのplt.imshowで表示した画像のカラーバーを任意の位置に表示する方法について説明する。mpl_toolkits.axes_grid1.inset_locator の inset_axesを用いて表示する。

コード

解説

モジュールのインポート

バージョン

データの生成

形状が(4,4)の二次元配列を作成して画像として表示する。

左上の画像

inset_axesでax1に新たなaxesを追加する。widthとheightはax1全体の大きさに対する比率であり、%で設定する。
loc=’lower left’でbbox_to_anchorを設定する位置を決め、bbox_to_anchorでlocの位置の(x,y,width,height)を設定する。この値は、相対的な値となるため、height=”50%”でbbox_to_anchorのheightが1の場合ax1のheightの半分の長さとなる。
ここでは画像の左側上に配置するように設定した。
bbox_transform=ax1.transAxesでax1の相対的な位置関係で場所を指定することとする。
ax1.imshowで画像を作成し、fig.colorbar(im1, cax=axins1)のようにすることでim1のカラーバーをaxins1の中に格納することができる。
axins1.yaxis.set_ticks_position(“left”)でカラーバーの目盛りを左側にした。

右上の画像

左上の画像と同様に処理する。
ここでは、bbox_to_anchor=(1.05, 0., 1, 1)とすることで画像の右側下に配置するようにした。なお、fig.colorbar(im2, cax=axins2, ticks=[0,0.25,0.5,0.75,1])のようにticksをリストで指定することで直接カラーバーの目盛りを設定できる。

左下の画像

前述の2つの画像と同様に処理する。
ここでは、widthを”75%’でheightを5%とすることで横長のinset_axesとした。
bbox_to_anchor=(.1, -0.225, 1, 1)とすることで画像の下に配置するようにした。なお、カラーバーを横方向に配置するには、fig.colorbarでorientation=”horizontal”とする必要がある。axins3.xaxis.set_ticks_position(“bottom”)とすることでカラーバーの目盛りを下側に表示した。

右下の画像

左下の画像と同様に処理する。
ここでは、bbox_to_anchor=(.475, 1.025, 1, 1)とすることで画像の右上に配置するようにした。axins4.xaxis.set_ticks_position(“top”)でカラーバーの目盛りを上側に配置した。

コードをダウンロード(.pyファイル)

コードをダウンロード(.ipynbファイル)

参考

Controlling the position and size of colorbars with Inset Axes — Matplotlib 3.9.2 documentation

コメント