タイルマップで地域スコアをコンパクト表示

中級

6.7.14

タイルマップで地域スコアをコンパクト表示

最終更新 2020-07-29 読了時間 1 分
まとめ
  • タイルマップで地域別スコアを色付き正方形のグリッドに配置して比較する。
  • Rectangleパッチとplt.cmカラーマップで各タイルを着色。
  • 詳細な地図を使わずに地域間の差をコンパクトに見せたいときに使う。

日本地図のような形状を使うほどでもないが地域差を見せたい、そんなときに便利なのがタイルマップです。小さな正方形にスコアを配置するだけで比較しやすい表が作れます。

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

regions = {
    "北海道": (0, 3, 68),
    "東北": (1, 2, 58),
    "関東": (2, 2, 82),
    "中部": (2, 1, 74),
    "近畿": (3, 1, 79),
    "中国": (3, 0, 63),
    "四国": (4, 0, 55),
    "九州": (4, -1, 60),
    "沖縄": (5, -1, 52),
}

fig, ax = plt.subplots(figsize=(6, 4))
for name, (x, y, score) in regions.items():
    color = plt.cm.Blues((score - 50) / 35)
    tile = Rectangle((x, y), 1, 1, facecolor=color, edgecolor="white", linewidth=1.5)
    ax.add_patch(tile)
    ax.text(
        x + 0.5,
        y + 0.5,
        f"{name}\n{score}",
        ha="center",
        va="center",
        color="white" if score > 70 else "#0f172a",
        fontsize=9,
    )

ax.set_xlim(-0.2, 6.2)
ax.set_ylim(-1.5, 4)
ax.set_xticks([])
ax.set_yticks([])
ax.set_title("地域別満足度スコアのタイルマップ")
ax.set_aspect("equal")
ax.set_frame_on(False)

sm = plt.cm.ScalarMappable(cmap="Blues", norm=plt.Normalize(50, 85))
sm.set_array([])
cbar = fig.colorbar(sm, ax=ax, fraction=0.045, pad=0.02)
cbar.set_label("スコア")

fig.tight_layout()

plt.show()

小さな正方形にスコアを配置するだけで比較しやすい表が作れますの図

読み方のポイント #

  • エリアの相対位置だけざっくり把握できればよい場合、詳細な地図を用意せずとも地域比較ができます。
  • 枠線を白にすると、小さな差も視覚的に見分けやすくなります。
  • 値のレンジを限定しておくと、極端なスコアに引っ張られずバランス良く色が割り当てられます。

いつ使うか #

  • 適している場面: 地域データを面積に左右されない均一なタイルで表示したいとき。小さい県も大きい県も同サイズで比較できます。
  • 不向きな場面: 地理的な位置関係がタイル配置と完全には一致しないため、空間的な隣接関係が分かりにくいです。
  • 代替手段: 正確な地理情報が重要なら実際の地図(コロプレスマップ)を使ってください。

よくある失敗パターン #

  • 地理的位置の不正確さ: タイル配置は地理的な位置関係を正確に反映しないため、隣接関係を前提とした分析には不向きです。用途に応じて実際の地図と使い分けてください。
  • タイル内のラベルが読みにくい: タイルが小さすぎるとラベルが潰れます。フォントサイズの調整やツールチップの併用で可読性を確保しましょう。