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

Plotly Choropleth(Dash场景):如何为GeoJSON中的指定区域添加轮廓高亮

Plotly Choropleth(Dash场景):如何为GeoJSON中的指定区域添加轮廓高亮

嘿,我刚好处理过一模一样的需求!要给你用Plotly画的Choropleth地图里的指定区域加高亮轮廓,其实核心思路就是在现有着色图层的基础上,叠加一个Scattergeo图层专门用来画高亮的轮廓线,完全适配你用Dash的场景,下面我结合你的代码一步步来:

第一步:从GeoJSON里提取目标区域的几何数据

首先你得从现有的my_geojson里把要高亮的那个区域的几何坐标捞出来,比如你想高亮STATE_2,可以这么写:

# 定义你要高亮的目标区域
target_state = "STATE_2"
highlight_geometry = None

# 遍历GeoJSON的features,匹配目标区域
for feature in my_geojson['features']:
    if feature['properties']['id'] == target_state:
        highlight_geometry = feature['geometry']
        break

第二步:转换坐标格式适配Scattergeo

Plotly的Scattergeo需要的是单独的纬度和经度列表,而GeoJSON里的Polygon坐标是嵌套数组,所以我们要做个简单的格式转换:

# 处理Polygon类型的坐标(如果是MultiPolygon需要额外循环处理子区域)
lon_list, lat_list = zip(*highlight_geometry['coordinates'][0])

第三步:叠加高亮轮廓图层到你的地图

接下来把这个轮廓图层加到你已经画好的base map上,这里可以自定义轮廓的颜色、粗细,完全按需调整:

# 先保留你原来的基础地图代码
fig = px.choropleth(
    df,
    geojson=my_geojson,
    color='value',
    locations='state',
    featureidkey='properties.id',
    projection='Mercator',
)
fig.update_geos(
    fitbounds='locations',
    visible=False,
)
fig.update_layout(
    coloraxis=dict(
        colorbar=dict(
            title='',
            orientation='h',
        )
    )
)

# 叠加高亮轮廓
fig.add_scattergeo(
    lon=list(lon_list),
    lat=list(lat_list),
    mode='lines',
    line=dict(width=3, color='#FF0000'),  # 比如用红色粗线条,自己改颜色和宽度
    fill=None,  # 只留轮廓,不要填充
    showlegend=False,  # 别让它出现在图例里
    hoverinfo='skip'  # 鼠标滑过也不显示信息,避免干扰原地图的hover效果
)

额外提示

  1. 如果要高亮多个区域,只需要循环遍历每个目标state,重复上面的提取坐标+添加Scattergeo图层的步骤就行
  2. 如果你的GeoJSON里有MultiPolygon类型的区域,记得要遍历coordinates里的每个子Polygon,分别提取坐标后添加图层
  3. 在Dash里使用的话,和你原来的用法完全一样,直接把这个处理好的fig传给dcc.Graph(figure=fig)就可以了

备注:内容来源于stack exchange,提问作者Samuel O.D.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 13:34:31