「喰う・書く・逃げる」に棲む処

 動物に関するデータ分析者のブログです

matplotlibのカラーマップを自作する

matplotlibで完全オリジナルのグラデーションカラーマップを自作する方法についてメモします。

1. ライブラリーの読み込み

今回はnumpymatplotlibを使います。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.colors import LinearSegmentedColormap

2. カラーマップの色リストを作る

今回は以下のようにして赤~緑~青のグラデーションのカラーマップを作ります。

値の指定はRGB値です。

color_list = [[255, 0, 0],[0, 255, 0],[0, 0, 255]]

matplotlibでは0~1のスケールで処理されるので、0~1の範囲に収まるように255(RGB値の最大値)で割ります。

colors = np.array(color_rgb)/255

3. カラーマップを生成する

以下を実行するとからマップが作られます。

cmap = LinearSegmentedColormap.from_list("color_map", colors)

4. カラーマップの確認

試しに以下のコマンドで図を出力してみます。

data = np.random.randn(30, 30)
fig, ax = plt.subplots(figsize = (5,5))
psm = ax.pcolormesh(data, cmap=cmap, rasterized=True, vmin=-4, vmax=4)
fig.colorbar(psm, ax=ax)
plt.show()

f:id:KRHB:20220407170712p:plain

こんな感じで赤~緑~青のグラデーションのカラーマップができていることがわかります。

5. 色の位置を調整

LinearSegmentedColormap.from_list()を実行するときに以下のようにすると、緑の中心をずらすことができます。

以下の例では緑を青側にずらしています。

# 赤の中心が0%、緑の中心が80%、青の中心が100%の位置に来るように指定
node = [0.0, 0.8, 1.0] 
cmap = LinearSegmentedColormap.from_list("color_map", list(zip(node, colors)))

この場合、図は以下のようになります。

f:id:KRHB:20220407171345p:plain