日本地図

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

まずインストール:

pip install japanmap
pip install --upgrade opencv-python pillow  # 必要に応じて

都道府県名:

In [ ]: jp.pref_names
Out[ ]: ['_', '北海道', '青森県', ……, '沖縄県']

PNG画像の白地図:

import japanmap as jp
import matplotlib.pyplot as plt

plt.imshow(jp.picture())

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

import pandas as pd

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

# picture() がnumpy.uint8型を受け付けないみたいなのでintに変換
def tint(t):
    return tuple(int(_) for _ in t)

d = {i: tint(cmap(x[i], bytes=True)[:3]) 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('<svg ',
              '<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="500" height="500" ')

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

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

Last modified: