カラーパレットの選び方(Choosing color palettes)

color_palettesのまとめです。

In [1]:
# 準備
%matplotlib inline
import seaborn as sns, numpy as np
from ipywidgets import interact, FloatSlider

color_palette()を用いた作成方法(Building color palettes with color_palette())

  • color_paletteを用いると、ほとんどのカラーパレットを作成できます。
  • set_paletteを用いると、デフォルトのカラーパレットを設定できます(例は後述)。

定性的なカラーパレット(Qualitative color palettes)

  • カラーパレット名を指定しないと、現在のカラーパレットが取得できます。(下記は、デフォルトのカラーパレット)
  • palplotは、カラーパレットを表示します。
In [2]:
current_palette = sns.color_palette(n_colors=24)
sns.palplot(current_palette)

デフォルトのカラーパレットは、6つのテーマ(deep, muted, pastel, bright, dark, colorblind)があります。(デフォルトはdeep)
Jupyterで、テーマをインタラクティブに確認できるようにしました。

In [3]:
def show_pal0(palette):
    sns.palplot(sns.color_palette(palette, 24))
interact(show_pal0, palette='deep muted pastel bright dark colorblind'.split());

色相カラーパレット(Using circular color systems)

よく使われるのは、hlsです。color_paletteでも、hls_paletteでも作成できます。

In [4]:
sns.palplot(sns.color_palette("hls",24))
sns.palplot(sns.hls_palette(24))

パラメータ l で明度を、s で彩度を指定できます。

In [5]:
sns.palplot(sns.hls_palette(24, l=0.2))
sns.palplot(sns.hls_palette(24, s = 0.2))

下記の様にするとくっきりしたカラーパレットになります。

In [6]:
sns.palplot(sns.hls_palette(24, l=0.5, s=1))

Jupyterで、明度と彩度をインタラクティブに確認できるようにしました。

In [7]:
def show_pal1(l, s):
    sns.palplot(sns.hls_palette(24, l=l, s=s))
interact(show_pal1, l=FloatSlider(0.6, max=1), s=FloatSlider(0.65, max=1));

hlsの色相ごとの明度のばらつきを少なくしたhuslも利用できます。

In [8]:
sns.palplot(sns.husl_palette(24))

カテゴリカラー(Using categorical Color Brewer palettes)

名前のついたカラーパレットです。 少し古いですが、印刷用一覧を用意しました。

In [9]:
sns.palplot(sns.color_palette("Set1", 24))

Jupyterでは、簡単に確認できます。

In [10]:
sns.choose_colorbrewer_palette('qualitative');

RGBで指定してカラーパレットを作成することもできます。

In [11]:
flatui = ["#9b59b6", "#3498db", "#95a5a6", "#e74c3c", "#34495e", "#2ecc71"]
sns.palplot(sns.color_palette(flatui, 24))

連続カラーパレット(Sequential color palettes)

  • 特定の名前で指定すると、連続的なカラーパレットになります。
  • 名前に"_d"をつけるとdarkになります。(つけないとlight)
  • 名前に"_r"をつけると逆順になります。
In [12]:
sns.palplot(sns.color_palette("Blues", 24))
sns.palplot(sns.color_palette("Blues_d", 24))
sns.palplot(sns.color_palette("Blues_r", 24))

Jupyterでは、簡単に確認できます。

In [13]:
sns.choose_colorbrewer_palette('sequential');

cubehelix_paletteを用いた連続カラーパレット(Sequential palettes with cubehelix_palette())

cubehelixを使って色調を変化させながら、明るさを連続的に変化させたカラーパレットを作成できます。

In [14]:
sns.palplot(sns.color_palette("cubehelix", 24))

cubehelix_paletteは、違うカラーパレットになるようです。

In [15]:
sns.palplot(sns.cubehelix_palette(24))

as_cmap=Trueとすることで、cmapパラメータを持つグラフ描画で使えるようになります。

In [16]:
np.random.seed(1)
x, y = np.random.multivariate_normal([0, 0], [[1, -.5], [-.5, 1]], size=300).T
cmap = sns.cubehelix_palette(light=1, as_cmap=True)
sns.kdeplot(x, y, cmap=cmap, shade=True);

Jupyterで、cubehelix_palette カラーパレットをインタラクティブに確認できるようにしました。

In [17]:
def show_pal2(start, rot):
    sns.palplot(sns.cubehelix_palette(24, start=start, rot=rot))
interact(show_pal2, start=FloatSlider(max=1), rot=FloatSlider(0.4, max=1));

カスタム連続カラーパレット(Custom sequential palettes with light_palette() and dark_palette())

light_paletteやdark_paletteを使うこともできます。

In [18]:
sns.palplot(sns.light_palette("blue", 24))
sns.palplot(sns.dark_palette("blue", 24))

先ほどの図の等高線に使ってみましょう。

In [19]:
cmap = sns.dark_palette("palegreen", as_cmap=True)
sns.kdeplot(x, y, cmap=cmap);

Jupyterで、インタラクティブに確認できるようにしました。

In [20]:
def show_pal3(light_or_dark, color, reverse):
    sns.palplot(eval('sns.%s_palette'%light_or_dark)(color=color, n_colors=24, reverse=reverse))
interact(show_pal3, light_or_dark=('light', 'dark'), color=('blue', 'navy', 'green', 'palegreen', 'red'), reverse=False);

2色に分かれたカラーパレット(Diverging color palettes)

両端が別の色で、中間が白色のカラーパレットです。
color_paletteで指定すれば作成できます。

In [21]:
sns.palplot(sns.color_palette("BrBG", 24))
sns.palplot(sns.color_palette("RdBu_r", 24))
sns.palplot(sns.color_palette("coolwarm", 24))

Jupyterでは、簡単に確認できます。

In [22]:
sns.choose_colorbrewer_palette('diverging');

2色に分かれたカスタムカラーパレット(Custom diverging palettes with diverging_palette())

diverging_paletteでカスタムできます。
中間を暗くすることもできます。

In [23]:
sns.palplot(sns.diverging_palette(220, 20, n=24))
sns.palplot(sns.diverging_palette(145, 280, s=85, l=25, n=24))
sns.palplot(sns.diverging_palette(255, 133, l=60, n=24, center="dark"))

Jupyterで、インタラクティブに確認できるようにしました。

In [24]:
def show_pal4(h_neg, h_pos, s, l, center):
    sns.palplot(sns.diverging_palette(h_neg, h_pos, n=24, s=s, l=l, center=center))
interact(show_pal4, h_neg=FloatSlider(220, max=360), h_pos=FloatSlider(20, max=360), 
         s=FloatSlider(75, max=99), l=FloatSlider(50, max=99), center=('light', 'dark'));

デフォルトカラーパレットの設定(Changing default palettes with set_palette())

set_paletteでデフォルトカラーパレットを設定できます。

In [25]:
def sinplot(flip=1):
    x = np.linspace(0, 14, 100)
    for i in range(1, 7):
        plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)

sinplot()
In [26]:
sns.set_palette("husl")
sinplot()

with句を使うと、局所的に変更できます。

In [27]:
with sns.color_palette("PuBuGn_d"):
    sinplot()