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 を使います。マーカーサイズは面積を指すことを踏まえ、完成した図で点を読み取りやすい値に調整してください。
よくある質問
-
Seaborn の既定のマーカーサイズを変更するにはどうすればよいですか?
sns.scatterplotにsで面積を渡します。たとえばs=64とすると、すべての点に共通のサイズを指定できます。 -
1 つの散布図で点ごとにサイズを変えられますか? はい。行ごとの数値配列を
sに渡すか、sizeとsizesを使って Seaborn にサイズの範囲を割り当ててもらい、凡例を表示できます。 -
hueは何をしますか? 変数を色に割り当てます。多くの場合、カテゴリの区別に使います。マーカーサイズの割り当てとは別のものです。 -
図を読みやすくするにはどうすればよいですか? 面積の範囲を調整し、役立つグループ分けを示す場合に限って色やマーカー形状を使い分け、軸にラベルを付けます。点が重なる場合は、マーカーを小さくするか透明度を設定すると見やすくなることがあります。
-
Seaborn の散布図を保存するにはどうすればよいですか? 図を表示または閉じる前に Matplotlib の図を保存します。たとえば、プロットを作成した後に
plt.savefig("scatterplot.png", dpi=150, bbox_inches="tight")を使います。