Seabornを用いた散布図(scatterplot)の作り方

Seabornライブラリを用いた散布図(Scatterplot)の描画方法について解説します。散布図(Scatterplot)は、2つの連続変数の関係性を視覚的に示すためのグラフです。Seabornのscatterplot関数は、さまざまなグルーピングに基づいて散布図を描画し、視覚的にデータの意味を持たせる機能を提供します。本記事では、scatterplot関数の基本的な使い方と、そのカスタマイズ可能なオプションについて詳しく見ていきましょう。

scatterplotの基本的な使い方

import seaborn as sns
sns.set_theme() #見た目をよくする設定
sns.scatterplot(data=データ, x="X軸の変数", y="Y軸の変数")

このコードは、指定されたデータセット内の2つの変数に基づいて散布図を描画します。data引数には、pandasのDataFrame、numpyのndarray、マッピング、またはシーケンスを指定できます。

Scatterplotのオプション

散布図には、huesizestyleという3つのパラメーターを使用して、データのサブセット間の関係性をわかりやすく示すことができます。

  • hue(色): 点の色を変えることで、別の変数のグループを表現します。カテゴリカル変数も数値変数も使用できますが、色のマッピングは数値変数の場合とは異なる振る舞いをします。
  • size(サイズ): 点のサイズを変えることで、別の変数のグループを表現します。こちらもカテゴリカル変数と数値変数の両方が使用できます。
  • style(スタイル): 点のマーカーの形状を変えることで、別の変数のグループを表現します。このパラメーターは数値型を持つことができますが、常にカテゴリカルとして扱われます。

その他のカスタマイズオプション

scatterplot関数は、色(palette)、色の順序(hue_order)、サイズ(sizes)、マーカーのスタイル(markers)、凡例の表示方法(legend)など、グラフの見た目をカスタマイズするための多くのオプションを提供します。これらのオプションを使って、グラフの見た目をデータの特性やプレゼンテーションの目的に合わせて調整することができます。

Seabornによる散布図(scatterplot)作成の例

Seabornライブラリを活用したScatterplotの例をご紹介します。このチュートリアルでは、tipsデータセットを例に、散布図の基本的な描画方法から、さまざまなセマンティックなマッピングの適用方法までを学びます。tipsはチップの額に関するデータセットで、seabornが提供してくれるものです。tipsデータセットには数値変数とカテゴリカル変数が混在しており、この多様性を利用して散布図の豊富な表現を探ります。

まず、Seabornのload_dataset関数を使ってtipsデータセットを読み込みます。

import seaborn as sns
sns.set_theme()

tips = sns.load_dataset("tips")
tips.head()

基本的な散布図

2つの変数間の散布図を描画するには、scatterplot関数にデータフレームとx、y軸に使用する変数名を指定します。

sns.scatterplot(data=tips, x="total_bill", y="tip")
seaborn scatterplot, basic plot

色(hue)を使用したグルーピング

hueパラメータを使用することで、点の色を変え、異なるカテゴリのデータを区別できます。

sns.scatterplot(data=tips, x="total_bill", y="tip", hue="time")
seaborn scatterplot, hue

スタイル(style)でマーカーを変更

styleパラメータを使用して、マーカーの形状を変更し、よりアクセシブルなプロットを作成します。

sns.scatterplot(data=tips, x="total_bill", y="tip", hue="time", style="time")
seaborn scatterplot, style

色(hue)とスタイル(style)の独立した変更

huestyleを異なる変数に割り当てることで、色とマーカーを独立して変更できます。

sns.scatterplot(data=tips, x="total_bill", y="tip", hue="day", style="time")
seaborn scatterplot, hue, style

数値データのセマンティックマッピング

hueに数値変数を割り当てると、量的なマッピングが適用され、デフォルトのパレットが変わります。

sns.scatterplot(data=tips, x="total_bill", y="tip", hue="size")
seaborn scatterplot, semantic

カスタムパレットの適用

カテゴリカルなマッピングを強制するために、カテゴリカルパレット名や明示的な色を指定します。

sns.scatterplot(data=tips, x="total_bill", y="tip", hue="size", palette="deep")
seaborn scatterplot, custom palette

サイズ(size)によるセマンティックマッピング

sizeパラメータに数値変数を割り当てることで、点の大きさにセマンティックなマッピングを適用します。

sns.scatterplot(data=tips, x="total_bill", y="tip", hue="size", size="size")
seaborn scatterplot, size

カスタムマーカーの使用

markersパラメータにリストや辞書を渡すことで、スタイル変数に応じた特定のマーカーを指定できます。

markers = {"Lunch": "s", "Dinner": "X"}
sns.scatterplot(data=tips, x="total_bill", y="tip", style="time", markers=markers)
seaborn scatterplot, custom marker

マーカーの形を任意に設定

matplotlib.axes.Axes.scatterに直接渡される追加のキーワード引数を使用して、任意にマーカーの形を設定できます。

sns.scatterplot(data=tips, x="total_bill", y="tip", s=100, color=".2", marker="+")
seaborn scatterplot, marker

wide-formデータの使用

wide-formデータを使用すると、各列がインデックスに対してプロットされ、hueとstyleマッピングも使用できます。

import pandas as pd
import numpy as np

index = pd.date_range("1 1 2000", periods=100, freq="m", name="date")
data = np.random.randn(100, 4).cumsum(axis=0)
wide_df = pd.DataFrame(data, index, ["a", "b", "c", "d"])

sns.scatterplot(data=wide_df)
seaborn scatterplot, wide-form

複数のサブプロットへの分割

relplotを使用してscatterplotFacetGridを組み合わせ、追加のカテゴリカル変数によるグルーピングを複数のサブプロットに渡って描画します。

sns.relplot(
    data=tips, x="total_bill", y="tip",
    col="time", hue="day", style="day",
    kind="scatter"
)
seaborn scatterplot, subplot

まとめ

seabornを用いてさまざまな散布図の作り方を見てきました。データの分析やプレゼンテーションに役立てていただけると幸いです。

上部へスクロール