Folium中的HeatMapWithTime插件

2024-09-28 21:09:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我能够创建热图,但没有显示点:

import folium
import folium.plugins as plugins
import numpy as np
import pandas as pd
import geopandas as gpd
from folium import Choropleth, Circle, Marker
from folium.plugins import HeatMap, MarkerCluster, HeatMapWithTime
ucdp_df = pd.read_csv('csv/ged201.csv') # from https://ucdp.uu.se/downloads/index.html#ged_global
ucdp = gpd.GeoDataFrame(ucdp_df, geometry=gpd.points_from_xy(ucdp_df.longitude, ucdp_df.latitude))
ucdp.crs = {'init': 'epsg:4326'}
m = folium.Map([35, 41], tiles='stamentoner', zoom_start=6)
hm = HeatMapWithTime(data=ucdp[['latitude', 'longitude']].values.tolist(),
                     index=ucdp['year'].values.tolist(), 
                     radius=10,
                     auto_play=True,
                     max_opacity=0.3)
hm.add_to(m)
m

Tags: csvfromimportdfindexaspluginspd
1条回答
网友
1楼 · 发布于 2024-09-28 21:09:26

您需要以正确的格式提供数据。这应该起作用:

from collections import defaultdict, OrderedDict

data = defaultdict(list)
for r in ucdp_df.itertuples():
    data[r.year].append([r.latitude, r.longitude])
    
data = OrderedDict(sorted(data.items(), key=lambda t: t[0]))

然后使用以下数据:

m = folium.Map([35, 41],
               tiles='stamentoner',
               zoom_start=6)


hm = HeatMapWithTime(data=list(data.values()),
                     index=list(data.keys()), 
                     radius=10,
                     auto_play=True,
                     max_opacity=0.3)
hm.add_to(m)
m

你会得到:

enter image description here

相关问题 更多 >