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

Plotly Choropleth:实现法国城市着色与省级行政区边界增强

解决方案

你的问题出在将城市和省级行政区数据合并到同一个Choropleth轨迹中——省级行政区的多边形面积更大,会覆盖在城市之上,且Choropleth默认会为所有匹配要素填充颜色(即使val为None,也可能被赋予默认填充色或非完全透明的样式)。

正确的做法是使用两个独立的轨迹:

  1. 一个Choropleth轨迹用于渲染城市的着色区域
  2. 一个Scattergeo轨迹用于绘制省级行政区的边界(无填充,仅显示红色粗线)

修改后的代码如下:

import numpy as np
import pandas as pd
import plotly.graph_objects as go

# 生成城市数据(保留原有逻辑)
list_rnd = np.random.randint(0,100,size=len(set_commune))
df_commune = pd.DataFrame({'code':list(set_commune), 'val':list_rnd})
df_commune['lineWidth'] = 1
df_commune['lineColor'] = 'grey'

# 省级行政区数据(仅需code用于匹配GeoJSON)
df_dept = pd.DataFrame({'code':['27', '76']})

# 创建空白图表
fig = go.Figure()

# 添加城市着色轨迹
fig.add_trace(go.Choropleth(
    geojson=geojson_all_levels,
    locations=df_commune['code'],
    z=df_commune['val'].astype(float),
    featureidkey='properties.code',
    colorscale='Viridis',
    colorbar_title='Nombre de demandes',
    marker_line_width=df_commune['lineWidth'],
    marker_line_color=df_commune['lineColor'],
))

# 添加省级行政区边界轨迹(用Scattergeo实现无填充的边界)
fig.add_trace(go.Scattergeo(
    geojson=geojson_all_levels,
    locations=df_dept['code'],
    featureidkey='properties.code',
    fillcolor='rgba(0,0,0,0)',  # 完全透明的填充色
    line=dict(width=3, color='red'),  # 红色粗线样式
    hoverinfo='none'  # 可选:隐藏省级行政区的悬浮提示
))

# 调整地图布局聚焦法国区域
fig.update_layout(
    geo=dict(
        scope='europe',
        center=dict(lat=46.2276, lon=2.2137),  # 法国地理中心坐标
        projection_scale=6,  # 缩放比例确保法国完整显示
        showland=False  # 可选:隐藏默认陆地背景
    )
)

fig.show()

关键说明:

  • 轨迹顺序:先添加城市Choropleth,再添加省级行政区Scattergeo,确保边界线绘制在城市区域之上
  • Scattergeo优势:专门用于地理多边形/散点绘制,支持独立设置填充色和线条样式,完美适配仅显示边界的需求
  • 透明填充:通过fillcolor='rgba(0,0,0,0)'确保省级行政区不会遮挡下方的城市着色区域

内容的提问来源于stack exchange,提问作者Nicolas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 16:14:51