Folium は、Python のデータ操作機能と JavaScript の地図描画ライブラリ Leaflet.js を組み合わせたパッケージで、Python 上でデータを整形しつつ、対話的な地図を簡単に生成・表示できます。データに基づくチャート的な可視化(コロプレスマップ)や、GeoJSON/TopoJSON の重ね合わせ、カスタムアイコン付きマーカーなど、多彩な機能を備えています (python-visualization.github.io).
インストール方法
pip install folium
または Conda を利用している場合は
conda install folium -c conda-forge
とするだけで、branca、Jinja2、NumPy、Requests といった依存も自動的に組み込まれます (python-visualization.github.io).
基本の地図作成
import folium
m = folium.Map(location=(45.5236, -122.6750))
# Jupyter Notebook なら m と入力するだけで地図が表示されます
# HTML ファイルとして保存する場合
m.save("index.html")
Map
の location
で中心座標、zoom_start
で初期ズームレベルを指定できます (python-visualization.github.io).
タイルセットの切り替え
デフォルトは OpenStreetMap ですが、以下のように他の組み込みタイル(例:CartoDB Positron)や、任意のタイル URL を指定できます。
folium.Map((45.5236, -122.6750), tiles="cartodb positron")
# カスタムタイルの例
folium.Map(
(45.5236, -122.6750),
tiles='https://{s}.tiles.example.com/{z}/{x}/{y}.png',
attr='My Data Attribution'
)
``` :contentReference[oaicite:3]{index=3}.
## マーカーの追加
ポップアップやツールチップ付きのマーカーを地図上に配置できます。アイコンの色や形もカスタマイズ可能です。
```python
m = folium.Map([45.35, -121.6972], zoom_start=12)
folium.Marker(
location=[45.3288, -121.6625],
tooltip="Click me!",
popup="Mt. Hood Meadows",
icon=folium.Icon(icon="cloud")
).add_to(m)
folium.Marker(
location=[45.3311, -121.7113],
tooltip="Click me!",
popup="Timberline Lodge",
icon=folium.Icon(color="green")
).add_to(m)
``` :contentReference[oaicite:4]{index=4}.
## 線状要素(PolyLine)
登山ルートや道路などを線で強調表示できます。
```python
m = folium.Map(location=[-71.38, -73.9], zoom_start=11)
trail_coordinates = [
(-71.3518, -73.6559),
(-71.3741, -73.7198),
# …他の座標…
]
folium.PolyLine(trail_coordinates, tooltip="Coast").add_to(m)
``` :contentReference[oaicite:5]{index=5}.
## グループ化とレイヤ制御
複数の要素を `FeatureGroup` でまとめ、`LayerControl` を加えることで、表示・非表示を切り替えられます。
```python
m = folium.Map((0, 0), zoom_start=7)
group1 = folium.FeatureGroup("Group 1").add_to(m)
folium.Marker((0, 0), icon=folium.Icon("red")).add_to(group1)
group2 = folium.FeatureGroup("Group 2").add_to(m)
folium.Marker((0, 1), icon=folium.Icon("green")).add_to(group2)
folium.LayerControl().add_to(m)
``` :contentReference[oaicite:6]{index=6}.
## GeoJSON/TopoJSON のオーバーレイ
URL、ファイルパス、辞書オブジェクトいずれでも読み込み可能で、地理情報データを地図上にそのまま重ね合わせられます。
```python
import requests
m = folium.Map(tiles="cartodbpositron")
geojson_data = requests.get(
"https://raw.githubusercontent.com/python-visualization/folium-example-data/main/world_countries.json"
).json()
folium.GeoJson(geojson_data, name="Countries").add_to(m)
folium.LayerControl().add_to(m)
``` :contentReference[oaicite:7]{index=7}.
## コロプレス(Choropleth)マップ
Pandas の DataFrame/Series と Geo/TopoJSON のジオメトリを結びつけ、塗り分け地図を作成できます。
```python
import pandas as pd
state_geo = requests.get(
"https://raw.githubusercontent.com/python-visualization/folium-example-data/main/us_states.json"
).json()
state_data = pd.read_csv(
"https://raw.githubusercontent.com/python-visualization/folium-example-data/main/us_unemployment_oct_2012.csv"
)
m = folium.Map(location=[48, -102], zoom_start=3)
folium.Choropleth(
geo_data=state_geo,
name="choropleth",
data=state_data,
columns=["State", "Unemployment"],
key_on="feature.id",
fill_color="YlGn",
fill_opacity=0.7,
line_opacity=0.2,
legend_name="Unemployment Rate (%)",
).add_to(m)
folium.LayerControl().add_to(m)
``` :contentReference[oaicite:8]{index=8}.
---
上記は入門的な機能の概要です。さらに詳細を知りたい場合は、User guide、Advanced guide、API reference を参照してください :contentReference[oaicite:9]{index=9}.
::contentReference[oaicite:10]{index=10}
leafmapとの違いや使い分け
以下、主に機能面とユースケースの観点から、Folium と Leafmap の相違点と使い分けをまとめます。
1. パッケージの位置づけと依存関係
- Folium
- Python から Leaflet.js を呼び出して地図を描画する薄いラッパー。
- 地図描画に特化し、依存するのは Leaflet(JavaScript)、branca、Jinja2 などの最小限のライブラリのみ .
- Leafmap
- Folium や ipyleaflet をはじめ、WhiteboxTools/whiteboxgui、ipywidgets、segment-geospatial など多数の OSS を統合した “地理情報分析+可視化” 用の高レベル・ツールセット。
- Jupyter 上での GUI 操作や、バックエンドでの空間解析(500+ の WhiteboxTools 処理が可能)をワンストップで提供する (leafmap.org).
2. インタラクティビティと双方向通信
- Folium
- 地図描画後は静的。マウス操作でズーム・パンはできるが、Python 側でそのイベントを直接ハンドリングすることはできない (leafmap.org).
- Leafmap
- デフォルトで
ipyleaflet
バックエンドを使うと、ipywidgets 経由の双方向通信が可能(クリック位置取得、動的レイヤ切り替えなど)。 - Google Colab では ipyleaflet に未対応のため自動で folium バックエンドにフォールバックするが、ローカル Jupyter 環境では ipyleaflet が優先され、高度なインタラクションを実現する (leafmap.org).
- デフォルトで
3. 空間解析機能の有無
- Folium
- 地図生成とジオデータの重ね合わせ(GeoJSON、TopoJSON、コロプレスなど)は容易だが、空間統計やハイドロロジー解析、LiDAR 処理などの機能は持たない。
- Leafmap
- WhiteboxTools(地形解析、流域解析、数学統計処理など500以上のツール)や、深層学習によるリモートセンシング画像のセグメンテーション機能をマップ GUI 上からノーコードで呼び出せる (leafmap.org).
4. 利用環境とプラットフォーム適性
- Folium
- 生成された地図は単一の HTML として保存・配布可能。Jupyter だけでなく任意の Web サーバーやスタンドアロン・アプリにも組み込みやすい。
- Leafmap
- Jupyter Notebook/Lab、Google Colab、Marimo などインタラクティブ環境向けに最適化。
- 複数の描画バックエンド(folium、ipyleaflet、HERE、Kepler.gl、Pydeck など)を切り替え可能で、環境や目的に応じて柔軟に利用できる (leafmap.org).
5. 使い分けのポイント
Folium | Leafmap | |
---|---|---|
地図だけサッと作る | ◯(簡潔なコードで HTML 生成) | △(Leafmap をインストールする手間あり) |
詳細な GIS 処理や解析 | × | ◯(GUI で高度解析ツールを即利用可) |
イベント取得など双方向インタラクション | × | ◯(ipywidgets/ipyleaflet により実現) |
Jupyter 以外の環境で配布 | ◯ | △(Notebook 前提の機能が多い) |
まとめ
- シンプルに地図を描きたい → Folium
- Jupyter 上で GUI 操作と地理空間解析を手軽に行いたい → Leafmap
自身の用途に合わせて使い分けてみてください!