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")

md=4

対応するrgbaカラーを取得します。

norm_value = norm(5)
rgba = cmap(norm_value)
print(rgba)
# (0.9998615916955017, 0.6259284890426758, 0.0, 1.0)

この記事に関するIssueをGithubで作成する

Read Next