バブルチャートで第三の変数を表現

入門

6.5.2

バブルチャートで第三の変数を表現

最終更新 2020-02-12 読了時間 1 分
まとめ
  • 点のサイズで第三の変数を表現するバブルチャート。
  • ax.scatters 引数でバブルサイズを指定し、3変数を同時に比較する。
  • 売上・利益率・顧客数など、複数指標を一画面で俯瞰したいときに使う。

売上(x 軸)、利益率(y 軸)、顧客数(バブルサイズ)の 3 変数を同時に表示する例です。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import numpy as np
import matplotlib.pyplot as plt

segments = ["Enterprise", "SMB", "Startup", "Consumer", "Partner"]
revenue = np.array([320, 180, 90, 70, 150])
margin = np.array([28, 22, 15, 12, 20])
customers = np.array([45, 110, 260, 520, 160])

fig, ax = plt.subplots(figsize=(6, 4))
scatter = ax.scatter(
    revenue,
    margin,
    s=customers,
    c=margin,
    cmap="Blues",
    alpha=0.7,
    edgecolors="#1f2937",
)

for x, y, label in zip(revenue, margin, segments):
    ax.text(x, y, label, fontsize=10, ha="center", va="center")

ax.set_xlabel("売上(百万円)")
ax.set_ylabel("利益率(%)")
ax.set_title("セグメント別 売上・利益率・顧客数")
ax.grid(alpha=0.3)

cbar = fig.colorbar(scatter, ax=ax)
cbar.set_label("利益率(%)")

fig.tight_layout()

plt.show()

売上(x 軸)、利益率(y 軸)、顧客数(バブルサイズ)の 3 変数を同時に表示する例ですの図

読み方のポイント #

  • バブルサイズは面積が比例するようにデータをスケーリングする。
  • オーバーラップが多い場合はズラす・透明度を下げるなどの工夫が必要。
  • カテゴリ名を中央に置くと凡例を省略でき、一覧性が高まる。

いつ使うか #

  • 適している場面: 3つの連続変数を同時に比較したいとき。点のサイズで第3変数を直感的に伝えられます。
  • 不向きな場面: サイズの差が小さいとき面積の違いを人間の目は正確に判別できないため、誤解を招くことがあります。
  • 代替手段: 変数が4つ以上なら散布図行列やパラレルコーディネートを検討してください。

よくある失敗パターン #

  • 面積と半径の混同: バブルのサイズを値に直接マッピングすると面積が2乗で大きくなり差が誇張されます。面積に比例させる(半径を sqrt(値) にする)のが正しい手法です。
  • バブル同士の重なり: 大きなバブルが小さなバブルを完全に隠してしまうことがあります。透過率を設定するか、小さいバブルを前面に描画する工夫が必要です。