Hexbin プロットで密度を捉える

中級

6.7.1

Hexbin プロットで密度を捉える

最終更新 2020-01-29 読了時間 1 分
まとめ
  • Hexbin プロットで大量の散布点を六角形ビンに集約し、密度分布を可視化する。
  • ax.hexbin でグリッドサイズとカラーマップを指定し、高密度領域を色で示す。
  • 散布図の点が重なりすぎる場合の代替として、2変量の分布把握に使う。

散布図に点が重なりすぎる場合は、六角形のビンでカウントする Hexbin プロットが便利です。matplotlib.hexbin で簡単に描けます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import numpy as np
import matplotlib.pyplot as plt

rng = np.random.default_rng(42)
session = rng.gamma(shape=3, scale=12, size=1000)   # 滞在時間(分)
amount = rng.normal(loc=2500, scale=700, size=1000) # 購入金額(円)

fig, ax = plt.subplots(figsize=(6, 4))
hb = ax.hexbin(
    amount,
    session,
    gridsize=18,
    cmap="Blues",
    mincnt=1,
)
ax.set_xlabel("購入金額(円)")
ax.set_ylabel("滞在時間(分)")
ax.set_title("滞在時間 × 購入金額の Hexbin")
cb = fig.colorbar(hb, ax=ax, shrink=0.85)
cb.set_label("件数")

fig.tight_layout()

plt.show()

matplotlib.hexbin で簡単に描けますの図

読み方のポイント #

  • 色が濃い六角形ほどデータが密集している領域。値の偏りを把握しやすい。
  • mincnt を指定すると、一定数以上データが入ったセルだけを描画できる。
  • カラーバーを付ければ件数を定量的に説明でき、ヒートマップとしても機能する。

いつ使うか #

  • 適している場面: 大量の散布点(数千〜数万点)の密度分布を可視化したいとき。過密プロットの問題を解消できます。
  • 不向きな場面: データ点が少ない場合は六角形ビンが空白だらけになり、通常の散布図の方が適切です。
  • 代替手段: 2次元 KDE を使えばパラメトリックに滑らかな密度分布を等高線で表現できます。

よくある失敗パターン #

  • グリッドサイズの不適切な設定: グリッドが粗すぎると密度の空間的構造が失われ、細かすぎると散布図と変わりません。データの広がりに合わせて試行錯誤してください。
  • 空ビンの扱い: 空のビンが白のままだと背景と区別がつかず、データがない領域か図の外か分かりません。空ビンを薄いグレーで塗るなどの工夫をしましょう。