06.1.1
日本地図
japanmap パッケージを使うと、都道府県別の売上や人口のような値を、47 都道府県を塗り分けた日本地図(コロプレス図)として見せられます。picture() を引数なしで呼べば白地図の画像配列が返り、{"北海道": "#a9e5bb", "青森": "#fcf6b1"} のように県名をキー、色をバリューにした辞書を渡せばその色で各県が塗られます。地図は plt.imshow で表示するただの画像なので、plt.xticks([]) で目盛りを消す以外に特別な描画処理は要りません。関東や近畿だけを見せたいときは pref_map(groups["近畿"], cols=…) で地域を拡大できます。Python 3.9 以上で動きます。パッケージの情報は japanmap(PyPI)、ソースコードは SaitoTsutomu/japanmap(GitHub)、作者本人による使い方の説明は 県別データの可視化(Qiita) にあります。pip install japanmap で入り、Python 3.9 以上が必要です。開発者に感謝!
直感 #
47 都道府県の値を棒グラフにすると 47 本の棒が並び、「北の県ほど高い」「太平洋側に集まっている」という地理的な偏りは読めません。地図の上で 47 県を値に応じた色で塗ると、その偏りが形として見えます。japanmap がやっていることは、県名と色の対応表を受け取り、県の形に沿って色を塗った 1 枚の画像を返すことだけです。あとは plt.imshow で表示します。
地図を表示する #
次のコードは picture() を引数なしで呼び、塗り分けのない白地図を表示します。
| |

着色する #
県名をキー、色名をバリューにした次のような辞書を picture() に渡すと、その県がその色で塗られます。辞書に含めなかった県は白のまま残ります。
{'北海道': '#a9e5bb', '青森': '#fcf6b1', '沖縄': '#fcf6b1'}
次のコードは 5 色のパレットから各県にランダムに 1 色を選んで辞書を作り、47 都道府県を塗り分けます。
| |
入力:{'北海道': '#2d1e2f', '青森': '#2d1e2f', '岩手': '#f7b32b', '宮城': '#e3170a', '秋田': '#e3170a', '山形': '#a9e5bb', '福島': '#2d1e2f', '茨城': '#f7b32b', '栃木': '#e3170a', '群馬': '#f7b32b', '埼玉': '#2d1e2f', '千葉': '#2d1e2f', '東京': '#fcf6b1', '神奈川': '#f7b32b', '新潟': '#f7b32b', '富山': '#a9e5bb', '石川': '#f7b32b', '福井': '#a9e5bb', '山梨': '#a9e5bb', '長野': '#2d1e2f', '岐阜': '#e3170a', '静岡': '#2d1e2f', '愛知': '#a9e5bb', '三重': '#e3170a', '滋賀': '#a9e5bb', '京都': '#fcf6b1', '大阪': '#f7b32b', '兵庫': '#2d1e2f', '奈良': '#f7b32b', '和歌山': '#a9e5bb', '鳥取': '#2d1e2f', '島根': '#e3170a', '岡山': '#2d1e2f', '広島': '#e3170a', '山口': '#a9e5bb', '徳島': '#f7b32b', '香川': '#2d1e2f', '愛媛': '#f7b32b', '高知': '#fcf6b1', '福岡': '#2d1e2f', '佐賀': '#2d1e2f', '長崎': '#2d1e2f', '熊本': '#fcf6b1', '大分': '#a9e5bb', '宮崎': '#fcf6b1', '鹿児島': '#a9e5bb', '沖縄': '#2d1e2f'}

実行結果の読み方 #
印字された辞書と地図を見比べると、北海道が #2d1e2f(濃紫)、東京が #fcf6b1(薄黄)と対応しています。この例の色はランダムなので地理的な意味はありませんが、実データで「値が大きいほど濃い」色を割り当てれば、同じ地図がそのまま都道府県別のヒートマップになります。東京や大阪のように面積の小さい県は色が見えにくいので、値の大きい県が小さく見える「面積の錯覚」には注意が必要です。
特定の地域のみを拡大表示する #
関東・近畿などの地域だけを拡大したいときは、pref_map に地域の県番号リストを渡します。次のコードは groups に定義済みの 8 地域を印字し、近畿の 7 府県だけを描きます。
| |
groups: {'北海道': [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]}
![groups: {‘北海道’: [1], ‘東北’: [2, 3, 4, 5, 6, 7], ‘関東’: 8, 9,…の図
使いどころと落とし穴 #
都道府県別の売上・人口・感染者数のように、47 の値に地理的な偏りがあるかを一望したいときに向いています。picture() に渡す辞書さえ作れば描けるので、値から色への変換(matplotlib.cm.Blues などのカラーマップ)に集中できます。一方、東京や大阪のように面積の小さい県は色が見えにくく、北海道は面積が大きいだけで目立つので、「値が大きい = 面積が大きい」と誤読されやすい。すべての県を同じ大きさの正方形で並べる タイルマップ なら、面積に依存せずに 47 県を比べられます。
色の区切りにも注意が要ります。連続的なグラデーションでは 1,000 と 1,200 のような微妙な差が見えないので、「500 未満」「500〜1,000」「1,000 以上」のように意味のある閾値で 3〜5 段階に区切った離散カラーマップのほうが読みやすいことが多いです。picture() の画像には凡例が付かないため、matplotlib.colorbar や plt.legend で色と値の対応を必ず添えてください。
- タイルマップ — 地域スコアを正方形グリッドで比較
- 相関ヒートマップ — 変数間の相関を色で一覧
- カレンダーヒートマップ — 年間の日別指標を曜日×週で俯瞰