#!/usr/bin/env python # coding: utf-8 # # カラーパレットの選び方(Choosing color palettes) # [color_palettes](https://stanford.edu/~mwaskom/software/seaborn/tutorial/color_palettes.html)のまとめです。 # In[1]: # 準備 get_ipython().run_line_magic('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) # 名前のついたカラーパレットです。 # 少し古いですが、[印刷用一覧](https://dl.dropboxusercontent.com/u/35689878/pdf/pal.pdf)を用意しました。 # 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()