You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将geopandas绘制的边界图层叠加到plotly的scatter_mapbox地图上

可行实现方案

完全不需要混合matplotlib和plotly技术栈,直接通过plotly的原生mapbox图层功能加载geojson边界即可,具体实现步骤如下:

  1. 读取并准备行政边界数据
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__
  1. 保留原有散点绘制代码不变
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,
                        )
  1. 更新布局添加行政边界线图层
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 19:36:01