日本地図

県別データの可視化で紹介されている japanmap ライブラリを使って日本地図を描いてみます。

まずは pip install japanmap でインストールします。インポートして、まずは都道府県名を列挙してみます。

import japanmap as jp

jp.pref_names
['_',
 '北海道',
 '青森県',
 '岩手県',
 ……中略……
 '沖縄県']

最初(第0要素)に無意味なものが入っているのは、都道府県コードと要素番号を一致させるためのようです。

PNG画像の白地図を描いてみます:

import matplotlib.pyplot as plt

plt.imshow(jp.picture())

例として、がんの分布で紹介したデータを読み込んで地図に色を塗ってみます:

import pandas as pd

df = pd.read_csv("https://okumuralab.org/~okumura/stat/data/gansokuhou2016.csv")
x = df["年齢調整罹患率日本総数"][1:48]
x = (x - min(x)) / (max(x) - min(x))
cmap = plt.get_cmap("bwr")  # or "coolwarm" or "cividis_r" etc...

d = {i: cmap(x[i], bytes=True) for i in range(1,48)}
plt.imshow(jp.picture(d))

# 不要なティックやラベルを削除する
plt.tick_params(bottom=False, top=False, left=False, right=False,
                labelbottom=False, labeltop=False, labelleft=False, labelright=False)

plt.savefig("190613a.png", bbox_inches="tight")
がんの分布

カラーマップについては matplotlib の Colormap reference を参照してください。

SVG の図を出力することもできます:

cmap = plt.get_cmap("coolwarm")
cols = ["#%02X%02X%02X" % (cmap(x[i], bytes=True)[:3]) for i in range(1,48)]
s = jp.pref_map(range(1,48), # qpqo=jp.get_data(move_okinawa=True),
                cols=cols, tostr=True)

# 境界線を黒で描くには:
# s = s.replace('<path ', '<path stroke="black" stroke-width="0.001" ')

with open("190613b.svg", "w") as f:
    f.write(s)
がんの分布