如何将geopandas绘制的边界图层叠加到plotly的scatter_mapbox地图上
可行实现方案
完全不需要混合matplotlib和plotly技术栈,直接通过plotly的原生mapbox图层功能加载geojson边界即可,具体实现步骤如下:
- 读取并准备行政边界数据
import geopandas as gpd import plotly.express as px # 读取自定义行政边界geojson states = gpd.read_file('myfile.geojson') # 可选:如果geojson文件过大,先简化几何提升渲染速度 # states.geometry = states.geometry.simplify(tolerance=0.01) # 转换为plotly可识别的geojson字典格式 states_geojson = states.__geo_interface__
- 保留原有散点绘制代码不变
fig = px.scatter_mapbox(df_year, lat='y', lon='x', color='drought_index', range_color=(-4, 4), hover_data={'x': False, 'y': False}, zoom=5, height=800, width=1050, center={'lat': 32.7089, 'lon': 53.6880}, color_continuous_scale=px.colors.diverging.RdYlGn, color_continuous_midpoint=0, )
- 更新布局添加行政边界线图层
fig.update_layout( mapbox_style="outdoors", mapbox_accesstoken=mb_token, # 新增边界图层配置 mapbox_layers = [ { "source": states_geojson, "type": "line", # 仅绘制边界线,无填充色块 "color": "#000000", # 可根据底图风格调整边界颜色 "width": 1.5, # 调整边界宽度保证清晰可见 "below": "traces" # 边界图层置于散点层下方,不会遮挡散点 } ] ) # 渲染查看结果 fig.show()
关键参数说明
type="line"规避了choropleth mapbox必须填充的问题,仅渲染多边形边界,不存在填充遮挡散点的情况below="traces"强制边界图层位于所有用户绘制的图形元素(此处为散点)下方,避免边界盖住散点的悬停交互- 可根据实际需求调整边界的颜色、宽度,适配不同的mapbox底图风格
内容的提问来源于stack exchange,提问作者Yashar
相关产品推荐
相关产品推荐

