HOWTO · Seaborn

Seaborn の散布図でマーカーサイズを設定する

このチュートリアルでは、Python の Seaborn のプロットでマーカーサイズを制御する方法を示します。

このページの内容

Seaborn の散布図で全点のマーカーサイズを同じにするには、sns.scatterplot に s を渡します。値は Matplotlib の散布図で使われる面積の単位(ポイントの二乗)です。データに応じてマーカーの面積を変えるには、数値配列を s に渡します。Seaborn にサイズの割り当てと凡例の作成を任せる場合は、データ変数に size を、表示するサイズの範囲に sizes を使います。

方法 1: scatterplot の s パラメーターを使う

すべての点で同じマーカー面積にする場合は s を使います。値はポイントの二乗で表す面積なので、値を 2 倍にしてもマーカーの幅が 2 倍になるわけではありません。点が重なりすぎず読み取れるように、値を調整してください。

次の例では、固定したマーカー面積を指定します。図のタイトル Fixed marker area と出力ラベル Marker area: は英語のままです。タイトルはマーカー面積が固定であることを示し、出力ラベルは面積の値をポイントの二乗(pt^2)で表示します。

import matplotlib.pyplot as plt
import seaborn as sns

x = [1, 2, 3, 4]
y = [2, 3, 2, 5]
area = 64

sns.scatterplot(x=x, y=y, s=area, color="teal", marker="o")
plt.xlabel("X")
plt.ylabel("Y")
plt.title("Fixed marker area")
print(f"Marker area: {area} pt^2")
plt.close()
Marker area: 64 pt^2

この呼び出しでは、固定値の s がすべての点に適用されます。色でグループを区別するには hue の割り当てを追加できます。hue はマーカー面積とは独立しています。

方法 2: 変数を使ってマーカーサイズを調整する

数値列で各マーカーの面積を表すには、行ごとに 1 つの数値を s に渡します。値は面積なので、生の測定値をそのまま使うのではなく、見やすい範囲になるよう列の値を拡大または縮小してください。たとえば、data という DataFrame に対して s=data["party_size"] * 20 とすると、各行に 1 つずつ面積が設定されます。倍率はデータや図のサイズに合わせて調整します。x、y、サイズの値が行ごとに対応していることを確認してください。

色で別のカテゴリ変数を表したい場合は、hue="day" を併用できます。サイズの値には数値を使い、カテゴリのグループ分けは値を s に掛け合わせるのではなく hue に指定します。

方法 3: 追加のパラメーターでマーカーサイズを調整する

Seaborn にデータ変数からマーカーサイズへの割り当てと対応する凡例の作成を任せるには、size セマンティクスを使います。たとえば、data という DataFrame では、sns.scatterplot(data=data, x="total_bill", y="tip", size="size", sizes=(30, 180)) のように呼び出します。ここで size は割り当てる列を指定し、sizes はマーカー面積の最小値と最大値をポイントの二乗で指定します。数値変数の値はこの範囲に合わせて拡大縮小され、カテゴリ変数の場合は離散的なサイズで表されます。

size は、色のグループ分けに使う hue や、マーカー形状の使い分けに使う style と組み合わせられます。hue の割り当てに使う色は palette で選べます。hue を使わず単色にする場合は color を指定します。全点で共通のマーカー形状を選ぶには marker を設定します。こうした指定でグループを見分けやすくできますが、サイズの凡例が読みやすいよう、視覚的な区別に使う要素は増やしすぎないでください。

まとめ

マーカー面積を固定する場合や、点ごとに数値配列で面積を指定する場合は s を選びます。データに応じたサイズの割り当てと凡例、範囲の調整が必要な場合は、Seaborn の size と sizes を使います。マーカーサイズは面積を指すことを踏まえ、完成した図で点を読み取りやすい値に調整してください。

よくある質問

  1. Seaborn の既定のマーカーサイズを変更するにはどうすればよいですか? sns.scatterplot に s で面積を渡します。たとえば s=64 とすると、すべての点に共通のサイズを指定できます。

  2. 1 つの散布図で点ごとにサイズを変えられますか? はい。行ごとの数値配列を s に渡すか、size と sizes を使って Seaborn にサイズの範囲を割り当ててもらい、凡例を表示できます。

  3. hue は何をしますか? 変数を色に割り当てます。多くの場合、カテゴリの区別に使います。マーカーサイズの割り当てとは別のものです。

  4. 図を読みやすくするにはどうすればよいですか? 面積の範囲を調整し、役立つグループ分けを示す場合に限って色やマーカー形状を使い分け、軸にラベルを付けます。点が重なる場合は、マーカーを小さくするか透明度を設定すると見やすくなることがあります。

  5. Seaborn の散布図を保存するにはどうすればよいですか? 図を表示または閉じる前に Matplotlib の図を保存します。たとえば、プロットを作成した後に plt.savefig("scatterplot.png", dpi=150, bbox_inches="tight") を使います。