【seaborn】カラーパレットのサンプルと使い方【matplotlib】
seabornやmatplotlibでグラフを作成する時、大抵はデフォルトの色設定で問題ないですが、少し込み入ったグラフだと、デフォルトの色設定だと見にくい場合があります。
また、時と場合によって、明るい色、はっきりした色、落ち着いた色などを使い分けたい場合もあるかと思います。
色を個別に指定していく方法も良いですが、seabornは様々なパターンの見やすいカラーパレットを提供してくれているので、使えると便利です。
カラーパレットの種類と特徴
seabornオリジナルのパレット
- デフォルトカラーパレット: Seabornのデフォルトパレットは、多様な色がバランス良く配置されています。一般的なデータセットに適しており、最も基本的な選択肢です。
- 明るいパレット (blight palette): 明るく柔らかい色合いで構成されており、柔和な印象のグラフに適しています。
- 暗いパレット (dark palette): 深みのある色合いが特徴で、より強い視覚的インパクトを与えるグラフに適しています。
- パステルパレット (pastel palette): 優しい色合いで、洗練された優雅なデザインが求められる場合に最適です。
- ミュートパレット (muted palette): 鮮やかさを抑えた色合いで、落ち着いた印象のグラフに適しています。
- カラーブラインドパレット: 色覚特性を考慮したパレットで、色覚多様性に配慮したグラフ作成に最適です。
(参考)上記のグラフを出力するコード
上記のグラフは以下のコードで作成可能です。
1import seaborn as sns
2import matplotlib.pyplot as plt
3
4# カラーパレットの選択
5palette_names = ["deep", "muted", "bright", "pastel", "dark", "colorblind"]
6
7# subplotsを作成
8fig, axes = plt.subplots(len(palette_names), 1, figsize=(8, 6))
9
10for i, palette in enumerate(palette_names):
11 colors = sns.color_palette(palette)
12 axes[i].imshow([colors], aspect=1) # カラーパレットを表示
13 axes[i].set_title(f'Seaborn Palette: {palette}')
14 axes[i].axis('off') # 軸をオフにする
15
16plt.tight_layout()
17plt.show()
18
上記のコードはあまり実用的ではないので、参考程度にです。
seabornオリジナル以外のパレット
- HUSLパレット (Hue, Saturation, Lightness): このパレットは、色相、彩度、明度に基づいています。色の均一な分布と視覚的な均衡を提供し、異なる色を明確に区別できるのが特徴です。複雑なデータセットにおいて、異なるカテゴリーを鮮明に示すのに適しています。
- Set1パレット: 鮮やかで区別しやすい色合いが特徴です。カテゴリーの区別が重要な場合、例えば、異なるデータグループを明確に示す必要があるグラフに適しています。
- Set2パレット: Set1よりも柔らかい色合いで構成されています。これは、鮮やかすぎる色を避けたい場合や、より穏やかな色合いを好む場合に最適です。
- Pairedパレット: このパレットは、色のペアを提供します。例えば、ある特定のカテゴリー内でのサブカテゴリーを示す際に有用です。色のペアが互いに補完し合うため、より洗練された視覚効果が得られます。
(参考)上記のグラフを出力するためのコード
上記のグラフは以下のコードで作成できます。
1import seaborn as sns
2import matplotlib.pyplot as plt
3import matplotlib.patches as patches
4
5# カラーパレットの選択
6palette_names = ['husl', 'Set1', 'Set2', 'Paired']
7
8# subplotsを作成
9fig, axes = plt.subplots(len(palette_names), 1, figsize=(8, 4))
10
11# 各パレットに含まれる最大の色の数を取得
12max_colors = max(len(sns.color_palette(p)) for p in palette_names)
13
14for i, palette in enumerate(palette_names):
15 colors = sns.color_palette(palette)
16 num_colors = len(colors)
17
18 # 軸をクリア
19 axes[i].clear()
20
21 # 各色の正方形を描画
22 for j, color in enumerate(colors):
23 rect = patches.Rectangle((j, 0), 1, 1, linewidth=1, edgecolor='none', facecolor=color)
24 axes[i].add_patch(rect)
25
26 # 軸のスケーリングを設定
27 axes[i].set_xlim(0, max_colors)
28 axes[i].set_ylim(0, 1)
29 axes[i].set_title(f'Seaborn Palette: {palette}')
30 axes[i].axis('off') # 軸をオフにする
31
32plt.tight_layout()
33plt.show()
34
あまり実用性とは関係ないので、詳細は割愛します。
JupyterNotebookでのカラーパレットの簡単な確認方法
JupyterNotebookではカラーパレットの色を簡単に確認することができます。
1sns.color_palette('pastel')
これを実行するだけで、pastelのカラーパレットの色が表示されます。
なお、color_paletteは3個の値のタプルのリストが返ってきます。
1import pprint
2pastel_palette = sns.color_palette('pastel')
3pprint.pprint(pastel_palette)
4# [(0.6313725490196078, 0.788235294117647, 0.9568627450980393),
5# (1.0, 0.7058823529411765, 0.5098039215686274),
6# (0.5529411764705883, 0.8980392156862745, 0.6313725490196078),
7# (1.0, 0.6235294117647059, 0.6078431372549019),
8# (0.8156862745098039, 0.7333333333333333, 1.0),
9# (0.8705882352941177, 0.7333333333333333, 0.6078431372549019),
10# (0.9803921568627451, 0.6901960784313725, 0.8941176470588236),
11# (0.8117647058823529, 0.8117647058823529, 0.8117647058823529),
12# (1.0, 0.996078431372549, 0.6392156862745098),
13# (0.7254901960784313, 0.9490196078431372, 0.9411764705882353)]
リストの各タプルの3個の値はRGB(赤、緑、青)の値を表しています。
直接sns.color_palette()を実行する以外に、palplot()を使う事でも同じようにパレットの色を確認できます。
1sns.palplot(sns.color_palette('muted'))
各パレットのサンプルを確認したいだけであれば、sns.color_palette()を実行するだけで良いかと思います。
カラーパレットを使ったグラフ作成
seabornのグラフでカラーパレットを指定する
seabornでグラフを作成する場合、大抵のグラフでは引数paletteに使いたいパレット名を指定すればOKです。
1import seaborn as sns
2import matplotlib.pyplot as plt
3
4# サンプルデータの作成
5data = {
6 'Category': ['A', 'B', 'C', 'D', 'E'],
7 'Value': [5, 3, 6, 2, 4]
8}
9
10# DataFrameを作成
11import pandas as pd
12df = pd.DataFrame(data)
13
14# パレットを指定してbarplotを作成
15sns.barplot(x='Category', y='Value', data=df, palette='husl')
16
17# タイトルを設定
18plt.title('Sample Bar Plot with Seaborn Palette')
19plt.tight_layout()
20# グラフを表示
21plt.show()
22
matplotlibのグラフでカラーパレットを使う
1import seaborn as sns
2import matplotlib.pyplot as plt
3
4# パレットを指定してbarplotを作成
5plt.bar(df['Category'], df['Value'], color=sns.color_palette('pastel'))
6
7# タイトルを追
8plt.title('Sample Bar Plot with Seaborn Palette')
9plt.tight_layout()
10# グラフを表示
11plt.show()
12
デフォルトのカラーパレットに設定する
sns.set_palette()
でデフォルトのカラーパレットを変更できます。
matplotlibのグラフ例
デフォルトのパレット設定の変更はsns.set_palette()でパレットを指定するだけでできます。
matplotlibでグラフを作成する場合、seabornのグラフとは少し挙動が違うので、どのように色が適用されるのかは注意が必要です。
以下のようにplt.bar()で棒グラフを書くときに、色をcolorで指定しない場合、全ての棒グラフの色が同じ色になります。
1sns.set_palette('pastel')
2# パレットを指定してbarplotを作成
3plt.bar(df['Category'], df['Value'])
4
5# タイトルを追
6plt.title('Sample Bar Plot with Seaborn Palette')
7plt.tight_layout()
8# グラフを表示
9plt.show()
10
全てのバーの色がpastelの1色目の色になるので注意が必要です。
バー毎に色を変えたい場合はplt.bar(df['Category'], df['Value'], color=sns.color_palette('pastel'))
とする必要があります。
seabornのグラフ例
seabornの場合、指定したカラーパレットで塗分けられるようになります。
1sns.set_palette('dark')
2# パレットを指定してbarplotを作成
3sns.barplot(data=df, x='Category', y='Value')
4
5# タイトルを追
6plt.title('Sample Bar Plot with Seaborn Palette')
7plt.tight_layout()
8# グラフを表示
9plt.show()
10
まとめ
1# seabornのカラーパレット
2palette_names = ["deep", "muted", "bright", "pastel", "dark", "colorblind"]
3palette_names = ['husl', 'Set1', 'Set2', 'Paired']
4
5# JupyterNotebook上でカラーパレットの色を確認する
6sns.color_palette('pastel')
7
8# カラーパレットの色を確認するためのグラフを作成する
9sns.palplot(sns.color_palette('muted'))
10
11# パレットを指定してbarplotを作成(seaborn)
12sns.barplot(x='Category', y='Value', data=df, palette='husl')
13
14# パレットを指定してbarplotを作成(matplotlib)
15plt.bar(df['Category'], df['Value'], color=sns.color_palette('pastel'))
16
17# デフォルトのカラーパレットを設定
18sns.set_palette('dark')