まずは使い方をざっくり説明する。
plt.colorbar()は特に指定のない場合、直前に描画したカラーバーを描くことのできるオブジェクト(
matplotlib.cm.ScalarMappable)に対してカラーバーを描く。
例えば
のように
imshowの後に
plotでグラフを描画しても、
plotで描かれる線グラフはカラーバーの適用対象外なので
imshowで生成された
2次元マップに対するカラーバーが描画される。
一方、
imshowや
scatterで新たに描画を行うとそれに対するカラーバーが描画される。
描画したオブジェクトを変数として受け取っておき、それを
colorbar()に与えることでそのオブジェクトに対するカラーバーを描くことができる。
少し細かい話をすると、
api matplotlib.pyplot.colorbar()によって
class matplotlib.colorbar.Colorbarのオブジェクトが生成される。これがカラーバー。
カラーバーの調整は生成する段階で行っても良いし、生成したカラーバーに対して手を加えても良い。
目盛の位置に関しては、
カラーバーを生成する段階で
ticksを与える
plt.colorbar(ticks=ticks)
もしくはカラーバーを生成してから
ticksを与える
colorbar.set_ticks(ticks)
どちらでも良い。
ただし
plt.colorbar()では目盛のラベルを細かく指定することはできないようなので、そういう場合はカラーバーオブジェクトに対して
cbar.set_ticks()を使うと良い。
値をランクに分けて描画する
不連続なカラーマップを用いて区分ごとに色分けする場合、各区分の中央に区分の名称を書きたい。
(例えば気候区分や植生分布で色分けする場合など)
8つの区分を定義し、これに応じた色分けをしてみる。
区分
1が
-2~-1, 区分
2が
-1~-0.5, といった具合。
カラーマップは
matplotlib.colors.ListedColormap()で生成する。引数には色のリストを与える。
ここではカラーマップ
"Blues"から色を取り出しているが、名前で指定しても良い。
ticksは各区分の中央の値を取れば良い。
まず
set_ticksで
ticksと
labelsを与えてみる。
目盛が汚いので消したい。
ラベルに対応する目盛は主目盛、区分の境界にある目盛は副目盛となっているのでそれぞれ調整する。
cbar.ax.tick_params(right=False)
主目盛を表示しないようにする
cbar.set_ticks(ticks, labels=labels)
主目盛の位置とラベルを指定する。ここでは区分の中央に名称を置くことになる。
set_ticks([], minor=True)
副目盛を消す