K_DM Book
用語集
対象者 標準
対象者別の入口 →

対象者の設定はこのブラウザの中にだけ保存されます。

言語 JA

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

中級

06.7.14

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

最終更新 2020-07-29 読了時間 2 分
まとめ
タイルマップは、地域を同じ大きさの正方形のタイルとして「おおよその位置関係」を保った格子に並べ、タイルの色で各地域の値を表す図です。本物の地図(コロプレスマップ)では北海道のように面積の大きい地域が色の印象を支配しますが、タイルマップは全地域を同じ面積にするので、沖縄のような小さい地域の値も同じ重みで目に入ります。matplotlib では地域ごとに (x, y, 値) を決めて Rectangle パッチを ax.add_patch で置き、plt.cm.Blues((score - 50) / 35) で値を色に変換し、ScalarMappable で凡例代わりのカラーバーを付けます。読み終えると、関東 82 と近畿 79 が濃い青、沖縄 52 が最も薄いという地域差を 9 枚のタイルから読み取り、自分の地域データを格子座標に割り当てて描けるようになります。

直感 #

9 地域の顧客満足度を比べたいとき、日本地図を塗り分けると北海道が巨大で沖縄は点にしか見えず、面積の差が値の差に見えてしまいます。タイルマップは地域を同じ大きさの正方形に置き換え、北海道は右上、沖縄は左下というように「だいたいの位置」だけを格子の座標で再現します。色の濃さがスコアで、地域名とスコアの数字をタイルの中に書くので、地図の形を知らなくても読めます。地理的に隣り合う地域が格子でも隣になるよう配置しておくと、「西日本は全体に薄い」といった地域のまとまりも色の塊として見えます。

Python で描く #

次のコードは 9 地域について (列, 行, スコア) の格子座標を辞書で持ち、Rectangle パッチを 1 枚ずつ置いて Blues カラーマップで塗ります。タイルの中に地域名とスコアを書き、右にカラーバーを添えます。

 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()

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

実行結果の読み方 #

タイルの色が濃いほどスコアが高く、関東 82 と近畿 79 が最も濃い青、沖縄 52 と四国 55 が最も薄い青です。タイルの位置は地図のおおまかな並びなので、東側(上・左)の列に濃いタイル、西側(右・下)に薄いタイルが集まっていれば、「東高西低」の地域差として読めます。すべてのタイルが同じ面積なので、北海道の 68 が広い面積で強調されることも、沖縄の 52 が小さくて見落とされることもありません。

使いどころと落とし穴 #

タイルマップは、都道府県や地域ごとのスコアを「面積に惑わされずに」比べたいときの図で、ダッシュボードやスライドの小さなスペースでも読めます。格子の配置は地理的な位置を近似しているだけなので、「隣接する県どうしの差」や「海岸線からの距離」のような空間的な分析には向かず、正確な位置関係が必要なら実際の地図を使うコロプレスマップに切り替えてください。タイルが小さいとラベルが潰れるので、47 都道府県なら figsize を大きくするか、スコアの数字を省いて色だけにします。色の範囲 Normalize(50, 85) をデータの範囲より広く取ると全タイルが似た色になって差が消えるため、最小値と最大値に近い範囲で固定します。