Matplotlibの ax.scatter は、単に点を打つだけでなく、点の「サイズ」や「色」を変えることで、2次元のグラフ上に3次元以上の情報を表現できる強力なメソッドです。
この記事では、散布図の基本的な描画方法から、バブルチャートの作成、透明度や境界線を使ったプロフェッショナルなデザイン調整まで、scatter メソッドのパラメータを網羅的に解説します。
散布図の作成と4次元情報の可視化サンプル
以下のコードは、ある企業の広告キャンペーンデータを模したものです。「広告費(X軸)」と「獲得顧客数(Y軸)」の関係に加え、「クリック率(色)」と「総収益(サイズ)」という4つの指標を同時に可視化しています。
import matplotlib.pyplot as plt
import numpy as np
# 乱数シードの固定
np.random.seed(123)
# データ生成:広告キャンペーンの成果データ(50件)
num_campaigns = 50
ad_cost = np.random.randint(100, 1000, num_campaigns) # X軸: 広告費
new_customers = ad_cost * 0.5 + np.random.randint(-50, 50, num_campaigns) # Y軸: 獲得顧客数
# 3次元・4次元目のデータ
click_rate = np.random.rand(num_campaigns) # 色(c): クリック率 (0.0~1.0)
revenue = np.random.randint(1000, 10000, num_campaigns) # サイズ(s): 総収益
# FigureとAxesの生成
fig = plt.figure(figsize=(10, 7))
ax = fig.add_subplot(1, 1, 1)
# 散布図の描画
# cに数値を渡すとカラーマップが適用され、sに数値を渡すとサイズが変わります
scatter = ax.scatter(
x=ad_cost,
y=new_customers,
s=revenue / 10, # サイズ調整(値が大きすぎるため割る)
c=click_rate, # 色の変化(クリック率に基づく)
cmap="viridis", # カラーマップの種類
alpha=0.7, # 透明度
linewidths=1.5, # 縁取り線の太さ
edgecolors="white", # 縁取り線の色
marker="o" # マーカーの形状
)
# カラーバーの表示(クリック率の凡例)
cbar = fig.colorbar(scatter, ax=ax)
cbar.set_label("CTR (Click Through Rate)")
# タイトルと軸ラベル
ax.set_title("Campaign Performance: Cost vs Customers")
ax.set_xlabel("Ad Cost ($)")
ax.set_ylabel("New Customers Acquired")
# グリッドの表示
ax.grid(True, linestyle="--", alpha=0.5)
plt.show()
主要パラメータの詳細解説
ax.scatter は ax.plot と異なり、個々の点に対して詳細なスタイル設定が可能です。各パラメータの挙動を理解することで、データの特性をより正確に伝えることができます。
1. 座標とデータ (x, y)
必須パラメータです。配列(リストやNumPy配列)の長さは必ず一致している必要があります。
2. マーカーのサイズ (s)
点の面積(ポイントの2乗)を指定します。
- 単一の数値: 全ての点を同じ大きさで描画します。
- 配列: 各点の大きさを個別に指定します。これを活用することで、いわゆる「バブルチャート」を作成できます。
- 注意点: データの値そのままだと点が大きすぎたり小さすぎたりする場合があるため、サンプルコードのように
revenue / 10といった係数を掛けて調整するのが一般的です。
- 注意点: データの値そのままだと点が大きすぎたり小さすぎたりする場合があるため、サンプルコードのように
3. マーカーの色 (c) とカラーマップ (cmap)
データの色を指定します。
- 色名・カラーコード:
"red"や"#FF5733"などを指定すると、全て単色になります。 - 数値配列: 連続値(例:温度、確率、密度)を渡すと、その値に応じて色が変化します。これには
cmapパラメータとの組み合わせが必要です。 cmap: 色のルール(カラーマップ)を指定します。"viridis": デフォルト。青〜緑〜黄のグラデーション。視認性が高い。"jet": 青〜赤。"coolwarm": 青〜白〜赤。正負の値を表現するのに適しています。
4. 透明度 (alpha)
0.0(透明)〜 1.0(不透明)の間で指定します。
散布図ではデータ点が密集して重なり合うことがよくあります。透明度を設定することで、重なり具合から「データの密度」を視覚的に判断できるようになります。
5. 境界線の設定 (linewidths, edgecolors)
点の輪郭線を制御します。
edgecolors: 輪郭線の色。背景色が濃い場合や、淡い色のマーカーを使う場合に"white"や"black"で縁取りを行うと、個々の点がはっきりと識別できるようになります。linewidths: 輪郭線の太さ。デフォルトは1.5程度ですが、点を強調したい場合は太くします。
6. マーカー形状 (marker)
点の形を指定します。データのカテゴリごとに形を変えてプロットする場合などに使用します。
| 指定値 | 形状 |
"o" | 円 (Circle) – デフォルト |
"^" | 上向き三角 (Triangle Up) |
"s" | 四角形 (Square) |
"D" | 菱形 (Diamond) |
"x" | バツ印 (X marker) |
"*" | 星型 (Star) |
まとめ:パラメータ設定一覧
最後に、今回解説した ax.scatter の主要パラメータを整理します。
通常のグラフ描画 (plot) とは異なり、scatter は**「サイズ」と「色」**という2つの軸を活用できる点が最大の特徴です。
| パラメータ | 役割 | 入力データの型 |
| x, y | 座標位置 | 配列 |
| s | 点の大きさ(重要度や量) | 数値 または 配列 |
| c | 点の色(属性や階級) | 色名 または 配列 |
| marker | 点の形状(カテゴリ) | 文字列 |
| alpha | 重なりの可視化 | 0〜1の浮動小数点 |
| linewidths | 輪郭の太さ | 数値 |
| edgecolors | 輪郭の色 | 色名 |
データの傾向をただ見せるだけでなく、「どのデータが重要か(サイズ)」「どの状態にあるか(色)」までを一枚の図で表現するために、ぜひこれらのパラメータを活用してみてください。
