Matplotlib カラーマップから色の情報を取得する
公開日 2024-11-17
Matplotlibのカラーマップから色情報を取得する方法について解説します。
Matplotlibで利用可能なカラーマップの一覧については、Matplotlibのカラーマップを参照してください。
カラーマップ情報の取得¶
カラーマップ情報を取得する場合、matplotlib.pyplotのget_cmap関数を使用します。
引数にカラーマップ名を与えると、matplotlib.colors.ListedColormapオブジェクトが戻り値として得られます。
以下にtab10と呼ばれる10色のカラーマップの例を示します。
import matplotlib.pyplot as plt
tab10_cmap = plt.get_cmap("tab10")
type(tab10_cmap)matplotlib.colors.ListedColormapちなみに、matplotlib.colors.ListedColormapオブジェクトをJupyter Labのセルに入力して実行すると、以下のように全ての色が表示されます。
tab10_cmapListedColormapクラス¶
ListedColormapクラスのオブジェクトには、以下の属性があります。
N: 色の数name: カラーマップの名前colors: 色の配列。RGB(A)チャネル
例として、先程のtab10のListedColormapオブジェクトの属性を以下に示します。
tab10_cmap.N10tab10_cmap.name'tab10'tab10_cmap.colors((0.12156862745098039, 0.4666666666666667, 0.7058823529411765),
(1.0, 0.4980392156862745, 0.054901960784313725),
(0.17254901960784313, 0.6274509803921569, 0.17254901960784313),
(0.8392156862745098, 0.15294117647058825, 0.1568627450980392),
(0.5803921568627451, 0.403921568627451, 0.7411764705882353),
(0.5490196078431373, 0.33725490196078434, 0.29411764705882354),
(0.8901960784313725, 0.4666666666666667, 0.7607843137254902),
(0.4980392156862745, 0.4980392156862745, 0.4980392156862745),
(0.7372549019607844, 0.7411764705882353, 0.13333333333333333),
(0.09019607843137255, 0.7450980392156863, 0.8117647058823529))cmap.colorsの1行目は青、2行目はオレンジ、3行目は緑、…となっています。
なお、色が連続的に変化するカラーマップの場合、色の数は256のようです。
以下にviridisの例を示します。
viridis_cmap = plt.get_cmap("viridis")
viridis_cmapviridis_cmap.N256色情報の取得¶
カラーマップ情報を格納したListedColormapオブジェクトから色の情報を取得する場合、オブジェクトに取得したい色のインデックスを与えます。
以下はtab10カラーマップの最初の色(青)の色情報を取得する例です。
4つの要素があり、順にRed, Green, Blue, Aplhaチャネルの値です。
tab10_cmap(0)(np.float64(0.12156862745098039),
np.float64(0.4666666666666667),
np.float64(0.7058823529411765),
np.float64(1.0))リストやタプルで複数の色を指定することも可能です。
tab10_cmap((0, 1))array([[0.12156863, 0.46666667, 0.70588235, 1. ],
[1. , 0.49803922, 0.05490196, 1. ]])色情報をグラフに適用¶
カラーマップから取得した色情報を、グラフに適用する例を示します。
Matplotlibの色指定では、4つの数値の配列が与えられた場合、RGBAの値として解釈されます。
したがって、ListedColormapオブジェクトから取得したRGBA情報をそのまま与えるだけで構いません。
tab10のカラーマップを再掲します。
tab10_cmap緑と茶色を取得して折れ線グラフに適用する例を以下に示します。
green = tab10_cmap(2)
brown = tab10_cmap(5)
fig, ax = plt.subplots()
ax.plot([0, 1], [0, 1], color=green)
ax.plot([0, 1], [1, 0], color=brown)
plt.show()