matplotlibでcolorbarのみplotし、ある値がどの色になるのか判定する
TL;DR
matplotlibを使っていて、colorbarだけ作りたい!そして、何らかの値がそのcolorbarのどの色になるのか知りたい!というようなことがあります。
ex) 何らかのSVGがあって、それに値に応じた色をつけたい、そしてカラーバーも欲しい
Python 3.7.4
やり方
matplotlib.colorbar.Colorbarを使います。また、カラーバーの値の範囲を決める、ある値がどの色になるかを決める際に、matplotlib.colors.Normalizeを使います。
まず範囲を決めます。
import matplotlib as mpl
import matplotlib.pyplot as plt
print(mpl.__version__)
# 3.4.3
vmin = -10
vmax = 10
norm = mpl.colors.Normalize(vmin=vmin, vmax=vmax)
カラーバーを書きます。matplotlib.pyplot.get_cmapでcolormapの情報を持ってきます。範囲を決める際に、先程用意したnormを用います。
saveするときが少し注意が必要で、bbox_inches="tight"
をオプションで指定しないとticksや、label情報が消えます。
fig, cbar = plt.subplots(figsize=(1, 5))
cmap = plt.get_cmap("Wistia")
mpl.colorbar.Colorbar(
ax=cbar,
mappable=mpl.cm.ScalarMappable(norm=norm, cmap=cmap),
orientation="vertical",
).set_label("sample", fontsize=20)
plt.savefig("sample_colormap.png", bbox_inches="tight")
対応するrgbaカラーを取得します。
norm_value = norm(5)
rgba = cmap(norm_value)
print(rgba)
# (0.9998615916955017, 0.6259284890426758, 0.0, 1.0)