Jupyter Notebook上で、緯度経度の情報を地図へ簡単にプロットできる方法を探していたところ、foliumの使い勝手が良かったので紹介します。
folium
PythonからLeaflet.jsで地図をプロットするパッケージです。
https://github.com/python-visualization/folium
使用前にpip install folium
またはconda install folium
でインストールします。
地図を表示する
まずは、千葉県千葉市の地図を表示します。
Mapで生成できます。
location
オプションに中心の緯度・経度を渡しています- Mapインスタンスを出力すると、leaflet.jsが読み込まれて表示されます
- デフォルトではOpenStreetMapの地図が使われます(
tiles
オプションでMapboxやStamenにも変更できます) zoom_start
で表示する時のズームを変えられます(デフォルト10で、大きくするとより拡大されます)
import folium chiba_map = folium.Map(location=[35.607451, 140.106340]) chiba_map
マーカをプロットする
次に千葉県の4つの市にマークします(緯度経度は市役所所在地、人口は千葉県のサイトから2018/1/1時点のデータを参照)。
市 | 緯度 | 経度 | 人口 |
---|---|---|---|
千葉市 | 35.607451 | 140.106340 | 975,535 |
館山市 | 34.996596 | 139.869906 | 46,349 |
銚子市 | 35.734795 | 140.826926 | 61,674 |
浦安市 | 35.653146 | 139.902058 | 168,169 |
Markerで地図上にマーカをプロットできます。
popup
オプションで、マーカをクリックした時表示されるテキストを設定できます- add_toメソッドでマップ上にプロットします
import pandas as pd chiba_cities = pd.DataFrame({ 'city': ['千葉市', '館山市', '銚子市', '浦安市'], 'latitude': [35.607451, 34.996596, 35.734795, 35.653146], 'longtude': [140.106340, 139.869906, 140.826926, 139.902058], 'population': [975535, 46349, 61674, 168169] }) chiba_map = folium.Map(location=[35.607451, 140.106340], zoom_start=9) for i, r in chiba_cities.iterrows(): folium.Marker(location=[r['latitude'], r['longtude']], popup=r['city']).add_to(chiba_map) chiba_map
マーカはいくつか種類があります。
CircleMarkerを使って、人口比を可視化してみます。
緯度経度を含む情報をぱぱっと可視化したいときに便利でしたので紹介しました。
GeoJSONを描画することもできます。詳しくはこちらの方の記事が参考になるかと思います。