はじめに
Pythonで地図の描画によく使われるであるfoliumで、グループAの国は赤色でグルーブBの国は青色で塗り分けたみたいな地図を作るのはどうしたらいいんだろう...となったのでまとめさせていただきます
ちなみに以下の図のような地図にしてHTMLに出力することができます
- (ちなみにこの記事書くのに使いました)
foliumで作れる地図
依存ライブラリ
folium==0.11.0
geopandas==0.9.0
以下の記事のようにコロプレス図と呼ばれる大小関係(eg: 都道府県別の新規コロナウイルス感染者数の日本地図)を表す地図はChoropleth
というメソッドでmapオブジェクトに表示できるようです。この場合、どの国がどの色になるのかは連続的な(シーケンシャルな)カラーマップと対応する値で自動で決まります。しかしこれではカテゴリごとの色分けは不可能です
そこでたどり着いたのが次の記事で、この実装の国を各カテゴリに色分けしている部分のみを取り出して紹介したいと思います
geopandasから国境のJSONを読んでfoliumで表示
import folium
import geopandas as gpd
gdf = gpd.read_file('https://raw.githubusercontent.com/johan/world.geo.json/master/countries.geo.json') # ローカルに落としてからでもよい
このgdfには各国の国境を描く緯度・経度のセットが入っています
これらの国を何らかの基準でカテゴリ分けします
今回はAから始まる国とBから始まる国の2カテゴリにしてみます
gdf['Group'] = ''
gdf.loc[gdf.name.str.startswith("A"), 'Group'] = 'A'
gdf.loc[gdf.name.str.startswith("B"), 'Group'] = 'B'
folium.GeoJsonにこのdataFrameの該当行を渡し、描画の設定をすることで好きな色で国に色をつけられます
m = folium.Map(location=[0, 0], zoom_start=2)
folium.GeoJson(gdf[gdf['Group']=='A'],
# レンダリングする表示の線や色の設定ができます
style_function=lambda x: {'fillColor': 'red', 'color': 'red'},
# マウスホバー時のツールチップの設定ができます
tooltip=folium.features.GeoJsonTooltip(fields=['name', 'Group'],labels=True, sticky=True)
).add_to(m)
folium.GeoJson(gdf[gdf['Group']=='B'],
style_function=lambda x: {'fillColor': 'blue', 'color': 'blue'},
tooltip=folium.features.GeoJsonTooltip(fields=['name', 'Group'],labels=True, sticky=True)
).add_to(m)m