ワッフルチャートで構成比をタイル表示

中級

6.3.8

ワッフルチャートで構成比をタイル表示

最終更新 2020-05-06 読了時間 2 分
まとめ
  • 100個のタイルで構成比を直感的に伝えるワッフルチャート。
  • matplotlib.patches.Rectangleでグリッド状のタイルを色分けして描画する。
  • 円グラフの代替として、割合をざっくり比較したいときに使う。

100 個のタイルにカテゴリのシェアを割り当てるワッフルチャートは、比率をざっくり伝えるのに便利です。

 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
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Rectangle

labels = ["A プラン", "B プラン", "C プラン", "解約"]
share = np.array([0.45, 0.30, 0.18, 0.07])
colors = ["#2563eb", "#22c55e", "#fbbf24", "#ef4444"]

grid_size = 10
tiles = np.round(share * grid_size * grid_size).astype(int)
tiles[-1] = grid_size * grid_size - tiles[:-1].sum()  # 誤差調整

fig, ax = plt.subplots(figsize=(4.5, 4.5))
ax.set_xticks([])
ax.set_yticks([])
ax.set_aspect("equal")

start = 0
for color, count in zip(colors, tiles):
    for n in range(count):
        row = (start + n) // grid_size
        col = (start + n) % grid_size
        ax.add_patch(
            Rectangle((col, grid_size - 1 - row), 1, 1, facecolor=color, edgecolor="white")
        )
    start += count

ax.set_xlim(0, grid_size)
ax.set_ylim(0, grid_size)
ax.set_title("プラン構成比のワッフルチャート")

legend_handles = [Rectangle((0, 0), 1, 1, color=c) for c in colors]
ax.legend(legend_handles, [f"{l} {s*100:.0f}%" for l, s in zip(labels, share)], loc="lower center", ncol=2, frameon=False, bbox_to_anchor=(0.5, -0.12))

fig.tight_layout()

plt.show()

100 個のタイルにカテゴリのシェアを割り当てるワッフルチャートは、比率をざっくり伝えるのに便利ですの図

読み方のポイント #

  • ブロック数を 100 個に固定すると割合が直感的に理解できる。
  • 凡例にパーセントを併記することで正確な値も伝えられる。
  • グリッド線を消すと柔らかい印象、残すと正方形の並びが強調される。

いつ使うか #

  • 適している場面: 構成比率を直感的なタイル(セル)数で伝えたいとき。100個のマスで割合を示す表現が分かりやすいです。
  • 不向きな場面: 小数点以下の細かい割合を正確に表現するのは難しく、精度が求められる場面には適しません。
  • 代替手段: 正確な割合の比較にはドーナツチャートや棒グラフの方が適しています。

よくある失敗パターン #

  • セル数が中途半端: 100 セル以外(例えば 50 セル)を使うと割合の解釈が直感的でなくなります。100 セルを基本にしてください。
  • カテゴリ数が多すぎる: 6 色以上に分けるとセルの色を区別しにくくなります。4〜5 カテゴリ以下に集約するのが望ましいです。