本記事では、matplotlib におけるカラーマップの種類、特徴、選び方、さらには具体的な使用例について詳しく解説します。
カラーマップの一覧
以下に、各カテゴリーごとにカラーマップを紹介します。
Sequential(順次)
値の大小がはっきりと連続しているデータ向け。低い値から高い値へと自然に色が変化するので、単調な増加・減少を示すデータに適しています。
- Perceptually Uniform 系:
['viridis', 'plasma', 'inferno', 'magma', 'cividis']

これらは人間の視覚特性に配慮して設計されており、低値から高値への変化が均一に感じられるため、近年のデフォルトカラーマップとして採用されています。
- 伝統的なグレースケール・その他:
'Greys', 'Purples', 'Blues', 'Greens', 'Oranges', 'Reds', 'YlOrBr', 'YlOrRd', 'OrRd', 'PuRd', 'RdPu', 'BuPu', 'GnBu', 'PuBu', 'YlGnBu', 'PuBuGn', 'BuGn', 'YlGn']

単色系のカラーマップは、シンプルなデータや背景とのコントラスト調整に便利です。
['binary', 'gist_yarg', 'gist_gray', 'gray', 'bone', 'pink', 'spring', 'summer', 'autumn', 'winter', 'cool', 'Wistia', 'hot', 'afmhot', 'gist_heat', 'copper']

Diverging(発散)
中央に基準値(例:ゼロ)を持ち、そこから左右に異なる色で表現するもの。プラスとマイナスの差や、中心値からの偏差を示す際に有用です。
['PiYG', 'PRGn', 'BrBG', 'PuOr', 'RdGy', 'RdBu', 'RdYlBu','RdYlGn', 'Spectral', 'coolwarm', 'bwr', 'seismic']

これらは、中心(通常はゼロや平均値)を境に、左右で対照的な色を持つため、偏差や差分を視覚的に強調するのに適しています。
Qualitative(定性)
カテゴリカルなデータに用いられるカラーマップ。各カテゴリごとに異なる色を割り当て、比較を容易にします。
['Pastel1', 'Pastel2', 'Paired', 'Accent', 'Dark2', 'Set1', 'Set2', 'Set3', 'tab10', 'tab20', 'tab20b', 'tab20c']

カテゴリカルデータやラベル付きデータの比較に利用され、色の違いによって各グループが識別しやすくなります。
Cyclic(循環)
角度や時間など、循環的なデータ表現に適したカラーマップ。色の始点と終点が連続しているため、ループ構造を直感的に表現できます。
['twilight', 'twilight_shifted', 'hsv']

周期的なデータ(例:角度、時刻)で、色の変化が連続して循環する特性を持つため、開始点と終了点のギャップがなくなるように設計されています。
その他
['flag', 'prism', 'ocean', 'gist_earth', 'terrain', 'gist_stern', 'gnuplot', 'gnuplot2', 'CMRmap', 'cubehelix', 'brg', 'gist_rainbow', 'rainbow', 'jet', 'turbo', 'nipy_spectral', 'gist_ncar']

カラーマップの使用例と選び方
カラーマップの適用
次に、シンプルなヒートマップに対してカラーマップを適用する例です。
import numpy as np
import matplotlib.pyplot as plt
# ランダムなデータを作成
data = np.random.rand(10, 10)
# ヒートマップの描画('viridis' を使用)
plt.imshow(data, cmap='viridis')
plt.colorbar()
plt.title("Viridis カラーマップを使用したヒートマップ")
plt.show()

この例では、ランダムデータをもとにヒートマップを作成し、viridis
カラーマップを適用しています。plt.colorbar()
によってカラーバーも表示し、数値と色の対応関係を明確にしています。
選び方のポイント
- データの性質に合わせる
順次データの場合は連続的に変化するカラーマップ、発散データの場合は中央を強調する発散カラーマップを選びます。 - 視認性と解釈のしやすさ
色の変化が均一で、色覚特性に配慮したカラーマップ(例:viridis
)は、視認性が高く、誤解を生みにくいです。 - 印刷やプレゼンテーションの目的
印刷や色弱者への配慮が必要な場合、パーセプトロン(perceptually uniform)なカラーマップの使用が推奨されます。
カラーマップの一覧を確認する
以下のコード例では、matplotlib の plt.colormaps()
を用いて、利用可能なカラーマップの一覧を表示する方法を示します。
import matplotlib.pyplot as plt
# 利用可能なカラーマップの一覧を取得
cmap_list = plt.colormaps()
# 一覧を表示
print("利用可能なカラーマップ:")
for cmap in cmap_list:
print(cmap)
このコードを実行すると、matplotlib が提供する全てのカラーマップ名が出力され、用途に合わせた選択が容易になります。
利用可能なカラーマップ:
magma
inferno
plasma
viridis
cividis
twilight
twilight_shifted
turbo
...
カスタムカラーマップの作成
matplotlib では、既存のカラーマップを基にしてカスタムカラーマップを作成することも可能です。たとえば、LinearSegmentedColormap
を利用して、自分だけの色のグラデーションを定義する方法があります。
from matplotlib.colors import LinearSegmentedColormap
# カスタムカラーマップの定義
colors = [(0, 'blue'), (0.5, 'white'), (1, 'red')]
custom_cmap = LinearSegmentedColormap.from_list('custom_cmap', colors)
# ヒートマップに適用
plt.imshow(data, cmap=custom_cmap)
plt.colorbar()
plt.title("カスタムカラーマップを使用したヒートマップ")
plt.show()

まとめ
本記事では、matplotlib のカラーマップ一覧について、以下のポイントを解説しました。
- カラーマップの役割
数値データを視覚的に表現するためのツールとしての役割。 - カラーマップのカテゴリー
Sequential、Diverging、Qualitative、Cyclic の各タイプとその特徴。 - 具体的な使用例
利用可能なカラーマップの一覧表示、ヒートマップへの適用方法、さらにはカスタムカラーマップの作成例。