Python

Python seaborn チュートリアル プロットの美学 カラーパレットの選択 (4)

原文のドキュメントはこちらから。

シーケンシャルカラーパレット

カラーパレットの2番目の主要なクラスは「シーケンシャル」と呼ばれている。この種のマッピングは、データが比較的低い値や興味のない値から、比較的高い値や興味のある値(またはその逆)に及ぶ場合に適している。前回までのチュートリアルで確認したように、シーケンシャルパレットのバリエーションの主な次元は輝度である。いくつかのシーボーン関数は、数値データをマッピングする際にシーケンシャルパレットをデフォルトにする。(歴史的な理由から、数値データのマッピングでは比較的色相の変化が少ないカラーパレットを使用するが、relplot()やdisplot()のような関数では、カテゴリカルマッピングと数値マッピングの両方ともhueパラメータで指定されている)。

知覚的に均一なパレット

シーケンシャルパレットは数値を表現することを目的としているため、最高のシーケンシャルパレットは知覚的に一様で、2つの色の相対的な識別性は、対応するデータ値の差に比例する。Seabornには、4つの知覚的に均一なシーケンシャルカラーマップが含まれている。(”rocket”, “mako”, “flare”, “crest”)最初の2つのカラーマップは非常に広い輝度範囲を持っており、ヒートマップのように色がプロットされた空間を埋め尽くすようなアプリケーションに適している。

sns.color_palette("rocket", as_cmap=True)
sns.color_palette("mako", as_cmap=True)

これらのカラーマップの極端な値は白に近いため、線や点などの要素を着色するのには適していない。このようなプロットには、”flare” や “crest” のカラーマップが適している。これらは輝度の変化の範囲がより限定されており、色相の変化がやや強調されていることで補正されている。輝度ランプのデフォルトの方向も逆になっているため、値が小さいほど色が薄くなる。

sns.color_palette("flare", as_cmap=True)
sns.color_palette("crest", as_cmap=True)

また、”magma” や “viridis” のように、matplotlibで提供されている知覚的に均一なコロマップを使用することも可能。

sns.color_palette("magma", as_cmap=True)
sns.color_palette("viridis", as_cmap=True)

matplotlibの規約と同様に、すべての連続的なカラーマップは、接尾辞”_r “を持つ逆バージョンを持っている。

sns.color_palette("rocket_r", as_cmap=True)

離散対連続写像

注意しなければならないのは、seabornは連続的なカラーマップから離散的な値を生成することができ、その際、最も極端な値は使用しないということ。rocket の離散的なバージョンと、上に示した連続的なバージョンを比較してみてみる。

sns.color_palette("rocket")

内部的には、seabornはカテゴリデータには離散バージョンを使用し、数値マッピングモードの場合は連続バージョンを使用する。離散連続コロマップは、特に色相のばらつきがある場合に、固有の順序を持つカテゴリデータの視覚化に適している。

連続的な「立方体螺旋」パレット

知覚的に均一なカラーマップは、RGB 色空間に基づいていないため、プログラムで生成するのは困難。キューブヘリックスシステムは、RGBベースの妥協案を提供する。完全に知覚的に均一ではないが、結果として得られるカラーマップには多くの優れた特性がある。重要なことは、デザインプロセスの多くの側面がパラメータ化可能であること。

Matplotlibには、デフォルトのキューブヘリックスのバージョンが組み込まれている。

sns.color_palette("cubehelix", as_cmap=True)

seaborn cubehelix_palette() 関数が返すデフォルトのパレットは matplotlib のデフォルトとは少し異なる。輝度ランプを反転させてみる。

sns.cubehelix_palette(as_cmap=True)

cubehelix_palette() の他の引数は、パレットの表示方法を制御する。変更する主なものは、start (0 から 3 の間の値) と rot (回転数) の 2つ (任意の値だが、通常は -1 から 1 の間の値)。

sns.cubehelix_palette(start=.5, rot=-.5, as_cmap=True)

回転すればするほど、色相のバリエーションが増えていく。

sns.cubehelix_palette(start=.5, rot=-.75, as_cmap=True)

エンドポイントの暗さと明るさ、そしてその順番の両方をコントロールできる。

sns.cubehelix_palette(start=2, rot=0, dark=0, light=.95, reverse=True, as_cmap=True)

color_palette() は、任意のキューブヘリックスパレットを生成するための “ch:” で始まる文字列コードを受け付ける。文字列の中にパラメータの名前を指定することができる。

sns.color_palette("ch:start=.2,rot=-.3", as_cmap=True)

また、コンパクトにするために、各パラメータは最初の文字で指定することができる。

sns.color_palette("ch:s=-.2,r=.6", as_cmap=True)

カスタム シーケンシャル パレット

カスタムシーケンシャルパレットへのよりシンプルなインターフェイスとしては、 light_palette() や dark_palette() を使用することができる。

sns.light_palette("seagreen", as_cmap=True)
sns.dark_palette("#69d", reverse=True, as_cmap=True)

cubehelix パレットと同様に、color_palette() またはパレットが受け入れられる場所で明暗のパレットを指定することもできる。

sns.color_palette("light:b", as_cmap=True)

r “を追加して、カラーマップを反転させる。

sns.color_palette("dark:salmon_r", as_cmap=True)

シーケンシャルカラーブリュワーパレット

Color Brewer ライブラリには、シーケンシャルパレットの良いオプションもいくつかある。これらのパレットには、1つの原色の色相を持つパレットが含まれている。

sns.color_palette("Blues", as_cmap=True)

複数の色相のオプションを一緒にする。

sns.color_palette("YlOrBr", as_cmap=True)