seaborn

【seaborn】カラーパレットのサンプルと使い方【matplotlib】

MAX

seabornやmatplotlibでグラフを作成する時、大抵はデフォルトの色設定で問題ないですが、少し込み入ったグラフだと、デフォルトの色設定だと見にくい場合があります。

また、時と場合によって、明るい色、はっきりした色、落ち着いた色などを使い分けたい場合もあるかと思います。

色を個別に指定していく方法も良いですが、seabornは様々なパターンの見やすいカラーパレットを提供してくれているので、使えると便利です。

スポンサーリンク

カラーパレットの種類と特徴

seabornオリジナルのパレット

  1. デフォルトカラーパレット: Seabornのデフォルトパレットは、多様な色がバランス良く配置されています。一般的なデータセットに適しており、最も基本的な選択肢です。
  2. 明るいパレット (blight palette): 明るく柔らかい色合いで構成されており、柔和な印象のグラフに適しています。
  3. 暗いパレット (dark palette): 深みのある色合いが特徴で、より強い視覚的インパクトを与えるグラフに適しています。
  4. パステルパレット (pastel palette): 優しい色合いで、洗練された優雅なデザインが求められる場合に最適です。
  5. ミュートパレット (muted palette): 鮮やかさを抑えた色合いで、落ち着いた印象のグラフに適しています。
  6. カラーブラインドパレット: 色覚特性を考慮したパレットで、色覚多様性に配慮したグラフ作成に最適です。

(参考)上記のグラフを出力するコード

上記のグラフは以下のコードで作成可能です。

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オリジナル以外のパレット

  1. HUSLパレット (Hue, Saturation, Lightness): このパレットは、色相、彩度、明度に基づいています。色の均一な分布と視覚的な均衡を提供し、異なる色を明確に区別できるのが特徴です。複雑なデータセットにおいて、異なるカテゴリーを鮮明に示すのに適しています。
  2. Set1パレット: 鮮やかで区別しやすい色合いが特徴です。カテゴリーの区別が重要な場合、例えば、異なるデータグループを明確に示す必要があるグラフに適しています。
  3. Set2パレット: Set1よりも柔らかい色合いで構成されています。これは、鮮やかすぎる色を避けたい場合や、より穏やかな色合いを好む場合に最適です。
  4. 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')

スポンサーリンク
ABOUT ME
MAX
MAX
ITエンジニア、データサイエンティスト
新卒でSIerに入社し、フリーランスになってWEB系へ転向。
その後AIの世界へ足を踏み入れ、正社員に戻る。 テーブルデータの分析がメイン。
スポンサーリンク
記事URLをコピーしました