如何在Folium分级统计图(Choropleth Map)上添加常驻文本
实现Folium分级统计图的永久文本显示
要让BoroCode文本始终显示在地图区域上(而非仅鼠标悬停时显示),可以用以下两种方法实现:
方法一:在分级图层后添加文本标注
先计算每个区域的几何中心,再在中心位置添加常驻文本:
import folium import geopandas path_to_data = geopandas.datasets.get_path("nybb") gdf = geopandas.read_file(path_to_data) # 计算每个区域的中心坐标,用于放置文本 gdf["centroid"] = gdf.geometry.centroid gdf["lon"] = gdf.centroid.x gdf["lat"] = gdf.centroid.y # 创建基础地图 m = folium.Map(location=[40.730610, -73.935242]) # 添加分级统计图层(保留原有的悬停提示) gdf.explore( m=m, column="BoroName", scheme="naturalbreaks", legend=True, k=10, cmap='winter', legend_kwds=dict(), name="boroughs", tooltip='BoroCode' ) # 遍历每个区域,添加永久文本标注 for idx, row in gdf.iterrows(): folium.Marker( location=[row["lat"], row["lon"]], # 自定义文本样式,可调整字体大小、颜色 icon=folium.DivIcon( html=f'<div style="font-size: 12px; color: black; font-weight: bold;">{row["BoroCode"]}</div>' ) ).add_to(m) folium.LayerControl().add_to(m) m
方法二:通过GeoJson直接添加文本标注
这种方式可以更灵活地控制文本图层的显示:
import folium import geopandas path_to_data = geopandas.datasets.get_path("nybb") gdf = geopandas.read_file(path_to_data) # 创建基础地图 m = folium.Map(location=[40.730610, -73.935242]) # 添加原有的分级统计图层 gdf.explore( m=m, column="BoroName", scheme="naturalbreaks", legend=True, k=10, cmap='winter', legend_kwds=dict(), name="boroughs", tooltip='BoroCode' ) # 加载GeoDataFrame并添加永久文本 folium.GeoJson( gdf, # 隐藏GeoJson的图形层,只显示文本 style_function=lambda x: {'fillOpacity': 0, 'color': 'transparent'}, pointToLayer=lambda feature, latlng: folium.Marker( location=latlng, icon=folium.DivIcon( html=f'<div style="font-size: 14px; color: darkred;">{feature["properties"]["BoroCode"]}</div>' ) ), # 禁用该图层的悬停和弹窗 tooltip=None, popup=None ).add_to(m) folium.LayerControl().add_to(m) m
注意事项
folium.DivIcon支持HTML样式,你可以根据需求调整文本的字体大小、颜色、粗细等。- 文本的位置基于区域的几何中心(
centroid),如果某些区域形状特殊,可手动调整坐标优化显示位置。 - 两种方法都保留了原有的
tooltip功能,同时新增常驻文本,兼顾两种显示需求。
内容的提问来源于stack exchange,提问作者Rebecca James
相关产品推荐
相关产品推荐

