Pythonで都道府県別の色分け日本地図を作成する方法〜japanmap〜
都道府県別の情報を日本地図にマッピングして、可視化する方法です。
以下のような図の作成ができます。
都道府県名-色名の一覧作成
基本的には、都道府県-色名(orカラーコード)の一覧をSeries型で作成し、japanmapメソッドでそれを呼び出すだけです。
以下のような形式です。
まずは可視化したいデータを上のようなSeries型に変換します。
ここは元データによって変わるので一概に方法を示すことは出来ませんが、この1つの参考として以下のQiita記事もご覧ください。
https://qiita.com/t_nishimaki/items/a5b94696454bd03fb248
日本地図へのマッピング
マッピングする事自体はmatplotlibとjapanmapを読み込めば簡単です。
上で作成したSeriesの名前をjapan_rateとすると、以下のように書きます。
1 2 |
fig = plt.subplots(figsize=(10,10)) plt.imshow(picture(japan_rate)) |
サイズはお好みで。すると、以下のような図が書き出されます。
デザインの調整
デフォルトだと少々画質が荒いので、デザインを整えてみます。
ここはセンスの問題もありますが、以下のように余計なものを排除し、png形式で描画すれば多少は見やすく、かつ県境が綺麗に表示できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
from japanmap import picture from japanmap import pref_map from japanmap import pref_names import io from cairosvg import svg2png from PIL import Image svg_code = pref_map(range(1,48), cols=japan_rate,tostr=True) svg_code = svg_code.replace('<svg ', '<svg width="2048px" height="2048px" ') svg_code = svg_code.replace('<path ', '<path style="stroke: black; stroke-width: 0.001" ') imgbytes_str = svg2png(bytestring=svg_code) jmap = Image.open(io.BytesIO(imgbytes_str)) fig, ax = plt.subplots(1,1, figsize=(10,10)) ax.tick_params(labelbottom=False, labelleft=False, bottom=False, left=False) ax.spines["right"].set_visible(False) ax.spines["left"].set_visible(False) ax.spines["top"].set_visible(False) ax.spines["bottom"].set_visible(False) plt.imshow(jmap, interpolation='bilinear'); |
こうすると、
多少は見た目良くなったのではないでしょうか。