matplotlibのカラーマップを自作する
matplotlibで完全オリジナルのグラデーションカラーマップを自作する方法についてメモします。
1. ライブラリーの読み込み
今回はnumpy
とmatplotlib
を使います。
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()
こんな感じで赤~緑~青のグラデーションのカラーマップができていることがわかります。
5. 色の位置を調整
LinearSegmentedColormap.from_list()
を実行するときに以下のようにすると、緑の中心をずらすことができます。
以下の例では緑を青側にずらしています。
# 赤の中心が0%、緑の中心が80%、青の中心が100%の位置に来るように指定 node = [0.0, 0.8, 1.0] cmap = LinearSegmentedColormap.from_list("color_map", list(zip(node, colors)))
この場合、図は以下のようになります。