2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

japanmapを利用した都道府県塗り分け

Last updated at Posted at 2025-09-17

概要

地域ごとのデータを比較・分析する際には、地図を使った可視化が重要な役割を果たします。今回は2025年の最低賃金データを例に、Pythonの japanmap ライブラリを用いた都道府県別データの可視化について簡単にまとめておきます。地図上に色を使って数値を反映させることで、地域間の傾向や特徴が視覚的に理解できるようになるはず:scream:

利用する主要ライブラリ
japanmap: 都道府県別のデータを地図上に簡単に可視化できるライブラリ

【注意】
演習ファイルでは、matplotlibで日本語を利用する際にjapanize-matplotlibを利用しています。Pythonのバージョンによっては動作しない(python 3.12以降)ことがあります。

  • japanize-matlibplot-modern を利用する
  • pip install setuptoolsによって、distutilsライブラリをインストールする

などの方法で対応できるかな:wink:

演習用のファイル

出典:最低賃金のデータは厚生労働省ホームページ(令和7年度地域別最低賃金の全国一覧)から取得・加工したものを利用しています。

1. 利用するデータ

都道府県別の数値データであれば問題なく地図上に表示できそうですが、今回は最低賃金を利用したいと思います。2025年は全国の最低賃金が1000円を超えたこともあり注目されていますし:sweat_drops:

利用するデータ
import pandas as pd
df = pd.read_csv("data/minimum_wage_2025.csv")

データの冒頭5行は表のような形です。

都道府県名 2025
0 北海道 1075
1 青森県 1029
2 岩手県 1031
3 宮城県 1038
4 秋田県 1031

2. japanmapの最低限の使い方

japanmap は都道府県名と色の対応関係を japanmap.picture の引数に指定するだけで地図上に着色できるという手軽さが特徴です。地理情報(GIS)の境界データであるシェイプファイルを意識する必要がないのも嬉しい限り:heart_eyes:

着色してみた
import japanmap
import matplotlib.pyplot as plt

plt.figure(figsize=(5,5))
plt.imshow(japanmap.picture({"北海道": "blue", "東京":"red", "千葉":"yellow"}))
plt.show()

実質的に、1行です。

plt.imshow(japanmap.picture({"北海道": "blue", "東京":"red", "千葉":"yellow"}))

これで次のような図形になります。

map_01.png

  • pictureの引数に都道府県と色の辞書を与えて色付け
  • 色:RGB、hexカラーコード(#112233)も利用可能

pictureの引数の色には、RGBやhexカラーコードも利用できるので、好みの方法で色を指定することができます。

RBGでの彩色

RGBで色塗り
plt.imshow(japanmap.picture({"北海道": (0,0,255), "東京都":(255,0,0), "千葉県":(255,255,0)}))

RBGですが、透明度Aは指定できないようです。

hexカラーコードでの彩色

hexカラーコードで色塗り
plt.imshow(japanmap.picture({"北海道": "#0000ff", "東京都":"#ff0000", "千葉県":"#ffff00"}))

都道府県名と対応する色を決めるだけでOKです。

2. 都道府県で塗り分け

最低賃金のデータを利用して地図上に数値を塗り分けていきます。

都道府県名データ可視化
# 1. ライブラリの読み込み
import japanmap
import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib

# 2. データの読み込み
df = pd.read_csv("data/minimum_wage_2025.csv")

# 3. 色の決定の準備
# 3.1 vminからvmaxの範囲を0〜1区間に変換
data = df["2025"].values
min_data = min(data)
max_data = max(data)

cmap = plt.cm.Blues
norm = plt.Normalize(vmin=min_data, vmax=max_data)

# 3.2 RBGへ変換(透明度Aを削除)関数
def color_scale(x):
    return cmap(norm(x), bytes=True)[:3]

# 4. 色の決定 都道府県ごとに辞書化
pref_color_dict = {
    pref: color_scale(val) for pref, val in zip(df["都道府県名"], df["2025"])
}

# 5. グラフ表示
plt.figure(figsize=(7,7))
ax = plt.gca()  # 現在の軸を取得
plt.imshow(japanmap.picture(pref_color_dict))
sm = plt.cm.ScalarMappable(cmap=cmap, norm=norm)
plt.colorbar(sm, ax=ax)  # カラーバー表示
plt.title("2025年度 最低賃金")
ax.set_xticks([])
ax.set_yticks([])
plt.show()

コードのポイント

  • 3番:cmapがmatplotlibのカラーマップとなります。SequentialのBluesにしてみました。
  • 3番:plt.Normalizeはデータをvminからvmaxまでの範囲のデータを、cmap(カラーマップ)が認識できる0から1の範囲に変換するものです。この正規化された値がcmapに渡され、それぞれの値に対応する色を決定します。
  • 3.2番:color_scale関数で、正規化した値(norm(x))をカラーマップに変換(cmap(norm(x)))します。このときbytes=Trueを指定すると、値が0〜255の整数値として表現されます。4番目の透明度Aを明示的に削除するために[:3]をつけました。
  • 4番:3番の準備を利用して、都道府県名と対応する色の辞書を作成します。{都道府県名:RBG値}の形になります。
  • 5番:作成した都道府県名と色の対応辞書をjapanmap.picture()で表示します。
  • 5番:plt....やax....はカラーバー表示やメモリ削除などの見た目変更部分となります。

最終的な表示結果は次のような形になります。

map_02.png

たぶん、color_scale関数の部分、lambdaで記述するんだろうな〜

3. 上位5都道府県の色を変更

japanmapでの着色は都道府県名と色の辞書で決まります。グラーデーションしてある部分を上書きすれば、上位5都道府県だけ異なる色にすることも簡単です。

# 1. トップ5 変更したい県のリスト
top5 = df.sort_values("2025", ascending=False).head(5)

# 2. ループで更新
for pref in top5["都道府県名"]:
    pref_color_dict[pref] = "Yellow"

# 3. 地図だけ表示
plt.figure(figsize=(7,7))
plt.imshow(japanmap.picture(pref_color_dict))
plt.title("2025年度 最低賃金 トップ5は黄色")
plt.show()

コードのポイント

  • 1番:データフレームdfを最低賃金の列で並び替え。上位5をtop5とする。
  • 2番:pref_color_dict(都道府県名データ可視化のコードで定義した)辞書について、top5の都道府県の値をYellowに変更する。
  • 3番:imshow(japanmap.picture(pref_color_dict))で地図表示する。

表示される画像は次のようになります。

map_03.png

参考サイト

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?