如何用GeoDataFrame生成Folium地图?能否直接用其绘制人口数据?
直接用GeoDataFrame绘制Folium地图的方法
嗨,你完全不需要额外创建JSON文件!Folium可以直接读取你的GeoDataFrame来绘制地图,省去手动导出JSON的步骤,效率高多了。
下面是基于你提供的代码扩展的完整示例,展示如何绘制带人口信息的世界地图:
import folium import geopandas as gpd # 加载并预处理数据(和你的代码逻辑保持一致) world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres')) world = world[(world.pop_est > 0) & (world.name != "Antarctica")] # 创建基础地图,以世界中心区域为初始视角 m = folium.Map(location=[20, 0], zoom_start=2) # 定义样式函数:根据人口数量分档设置填充颜色 def style_function(feature): pop = feature['properties']['pop_est'] # 按人口规模划分颜色梯度 if pop < 10_000_000: color = '#ffffcc' elif pop < 100_000_000: color = '#ffeda0' elif pop < 500_000_000: color = '#fed976' elif pop < 1_000_000_000: color = '#feb24c' else: color = '#fd8d3c' return { 'fillColor': color, 'color': 'black', 'weight': 1, 'fillOpacity': 0.7 } # 定义高亮函数:鼠标悬停时增强区域边框和透明度 def highlight_function(feature): return { 'fillOpacity': 0.9, 'weight': 2 } # 将GeoDataFrame直接添加到地图上 folium.GeoJson( world, style_function=style_function, highlight_function=highlight_function, tooltip=folium.GeoJsonTooltip( fields=['name', 'pop_est'], aliases=['国家名称:', '人口数量:'], localize=True ) ).add_to(m) # 保存地图为HTML文件(或在Jupyter环境直接执行m显示) m.save('world_population_map.html')
关键细节说明:
folium.GeoJson()可以直接接收你的worldGeoDataFrame作为参数,底层会自动调用world.to_json()完成格式转换,完全不需要手动导出JSON文件。- 通过
style_function可以根据人口数据动态调整区域样式,让数据可视化更直观。 GeoJsonTooltip实现了鼠标悬停弹窗功能,能快速查看每个国家的具体信息,提升地图交互性。
如果之前尝试folium.map和geojson函数时遇到问题,大概率是没用到GeoDataFrame的直接传入能力,试试上面的示例应该就能解决啦。
内容的提问来源于stack exchange,提问作者Yilun Qian
相关产品推荐
相关产品推荐

