Help us understand the problem. What is going on with this article?

Seabornのカラーパレットの選び方

はじめに

pythonの描画パッケージseabornのChoosing color palettesをまとめたものです。
Jupyterファイルも用意してあります。

準備

python
%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は、カラーパレットを表示します。
python
current_palette = sns.color_palette(n_colors=24)
sns.palplot(current_palette)

image

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

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

image

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

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

python
sns.palplot(sns.color_palette("hls",24))
sns.palplot(sns.hls_palette(24))

image
image

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

python
sns.palplot(sns.hls_palette(24, l=0.2))
sns.palplot(sns.hls_palette(24, s=0.2))

image
image

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

python
sns.palplot(sns.hls_palette(24, l=0.5, s=1))

image

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

python
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));

image

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

python
sns.palplot(sns.husl_palette(24))

image

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

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

参考:https://matplotlib.org/examples/color/colormaps_reference.html

python
sns.palplot(sns.color_palette("Set1", 24))

image

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

python
sns.choose_colorbrewer_palette('qualitative');

image

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

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

image

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

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

image
image
image

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

python
sns.choose_colorbrewer_palette('sequential');

image

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

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

python
sns.palplot(sns.color_palette("cubehelix", 24))

image

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

python
sns.palplot(sns.cubehelix_palette(24))

image

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

python
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);

image

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

python
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));

image

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

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

python
sns.palplot(sns.light_palette("blue", 24))
sns.palplot(sns.dark_palette("blue", 24))

image
image

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

python
cmap = sns.dark_palette("palegreen", as_cmap=True)
sns.kdeplot(x, y, cmap=cmap);

image

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

python
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);

image

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

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

python
sns.palplot(sns.color_palette("BrBG", 24))
sns.palplot(sns.color_palette("RdBu_r", 24))
sns.palplot(sns.color_palette("coolwarm", 24))

image
image
image

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

python
sns.choose_colorbrewer_palette('diverging');

image

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

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

python
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"))

image
image
image

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

python
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'));

image

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

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

python
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()

image

設定して描画します。

python
sns.set_palette("husl")
sinplot()

image

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

python
with sns.color_palette("PuBuGn_d"):
    sinplot()

image

以上

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした