マップで描画する 2
以前の投稿でfolium を用いることでマップを用いた描画ができることをまとめた.
今回はそれをさらに発展させ,ヒートマップ形式でまとめてみた.(設定数字は仮値)
サンプルコードを残す.
# ライブラリのインポート
import folium
import pandas as pd
from branca.colormap import linear
from folium.plugins import HeatMap
# サンプルデータの作成(都市名、緯度・経度、人口)
data = {
'City': ['東京', '大阪', '名古屋', '福岡', '札幌'],
'Latitude': [35.6895, 34.6937, 35.1815, 33.5902, 43.0618],
'Longitude': [139.6917, 135.5023, 136.9066, 130.4017, 141.3545],
'Population': [13929286, 2691186, 2295666, 1620585, 1952356]
}
df = pd.DataFrame(data)
# 地図の作成(レイヤーコントロールを有効にするためにtilesをNoneに設定)
m = folium.Map(location=[36.2048, 138.2529], zoom_start=5, tiles=None)
# ベースマップの追加
folium.TileLayer('OpenStreetMap', name='ベースマップ', control=True).add_to(m)
folium.TileLayer(
'Stamen Terrain',
name='地形図',
control=True,
attr='Map tiles by Stamen Design, CC BY 3.0 — Map data © OpenStreetMap'
).add_to(m)
# カラーマップの作成
colormap = linear.YlOrRd_09.scale(df['Population'].min(), df['Population'].max())
colormap.caption = '人口規模'
# マーカーレイヤーの作成
marker_layer = folium.FeatureGroup(name='都市マーカー')
for idx, row in df.iterrows():
folium.CircleMarker(
location=[row['Latitude'], row['Longitude']],
radius=10,
popup=f"{row['City']} (人口: {row['Population']})",
color=colormap(row['Population']),
fill=True,
fill_color=colormap(row['Population']),
fill_opacity=0.7
).add_to(marker_layer)
marker_layer.add_to(m)
# カラーマップを地図に追加
colormap.add_to(m)
# ヒートマップの追加(レイヤーとして追加)
heatmap_layer = folium.FeatureGroup(name='ヒートマップ')
HeatMap(
data=df[['Latitude', 'Longitude']].values.tolist(),
radius=25, # ヒートマップの影響範囲を調整
blur=15, # ヒートマップのぼかし具合を調整
max_zoom=5
).add_to(heatmap_layer)
heatmap_layer.add_to(m)
# レイヤーコントロールの追加
folium.LayerControl().add_to(m)
# 地図の保存
m.save('combined_map.html')