レインクラウドプロットで分布の全体像を一枚に

中級

6.2.11

レインクラウドプロットで分布の全体像を一枚に

最終更新 2026-03-06 読了時間 2 分
まとめ
  • 半バイオリン+箱ひげ+ストリップを重ねて分布形状・要約統計・個別データ点を同時に見せる。
  • matplotlib だけで描けるため外部パッケージ不要。violinplot の片側を消して組み合わせる。
  • 論文やレポートでグループ間の分布比較を説得力ある 1 枚にまとめたいときに使う。

レインクラウドプロットは「雲(半バイオリン)」+「雨(ストリップ)」+「水たまり(箱ひげ)」を組み合わせたチャートで、分布の形状・外れ値・中央値をすべて 1 枚で伝えられる。学術論文での採用が増えている可視化手法。

 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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import numpy as np
import matplotlib.pyplot as plt

rng = np.random.default_rng(42)
groups = ["Group A", "Group B", "Group C"]
data = [
    rng.normal(loc=50, scale=8, size=120),
    rng.normal(loc=62, scale=12, size=100),
    rng.exponential(scale=10, size=110) + 40,
]

fig, ax = plt.subplots(figsize=(8, 5))
positions = [1, 2, 3]

# --- half-violin (cloud) ---
vp = ax.violinplot(data, positions=positions, showextrema=False, widths=0.6)
for body in vp["bodies"]:
    m = np.mean(body.get_paths()[0].vertices[:, 0])
    body.get_paths()[0].vertices[:, 0] = np.clip(
        body.get_paths()[0].vertices[:, 0], -np.inf, m
    )
    body.set_facecolor("#2563eb")
    body.set_alpha(0.35)

# --- strip (rain) ---
for pos, d in zip(positions, data):
    jitter = rng.uniform(-0.08, 0.08, size=len(d))
    ax.scatter(
        pos + 0.15 + jitter, d, s=8, alpha=0.45, color="#1e40af", edgecolors="none"
    )

# --- boxplot (puddle) ---
bp = ax.boxplot(
    data,
    positions=positions,
    widths=0.12,
    patch_artist=True,
    showfliers=False,
    zorder=3,
)
for box in bp["boxes"]:
    box.set(facecolor="white", edgecolor="#1e40af", linewidth=1.2)
for med in bp["medians"]:
    med.set(color="#ef4444", linewidth=2)

ax.set_xticks(positions)
ax.set_xticklabels(groups)
ax.set_ylabel("スコア")
ax.set_title("レインクラウドプロット — グループ別スコア分布")
ax.grid(axis="y", alpha=0.2)

fig.tight_layout()
plt.show()

レインクラウドプロットによるグループ別スコア分布

読み方のポイント #

  • 半バイオリン(雲)の膨らみで分布の偏りや多峰性を確認する。Group C のように右に裾が長い分布も一目でわかる。
  • 箱ひげ(水たまり)で中央値と四分位を定量的に比較する。
  • ストリップ(雨)の点の密集度でサンプルサイズの違いや外れ値の有無を把握する。

いつ使うか #

  • 適している場面: グループ間の分布を論文やプレゼンで比較したいとき。バイオリンプロット+箱ひげ図+ストリッププロットを 1 枚に統合できる。
  • 不向きな場面: グループ数が 10 以上あると横幅が足りず読みにくくなる。
  • 代替手段: グループ数が少なく詳細不要ならバイオリンプロット単体、さらに簡素でよければ箱ひげ図で十分。

よくある失敗パターン #

  • ストリップの重なりすぎ: サンプル数が多いと点が潰れて黒い帯になる。alpha を下げるか、s(点サイズ)を小さくして対処する。
  • 半バイオリンの向きが不統一: 左右を間違えると雲と雨が重なって読めない。バイオリンを左、ストリップを右に統一するのが標準。