Plotly Choropleth:实现法国城市着色与省级行政区边界增强
解决方案
你的问题出在将城市和省级行政区数据合并到同一个Choropleth轨迹中——省级行政区的多边形面积更大,会覆盖在城市之上,且Choropleth默认会为所有匹配要素填充颜色(即使val为None,也可能被赋予默认填充色或非完全透明的样式)。
正确的做法是使用两个独立的轨迹:
- 一个Choropleth轨迹用于渲染城市的着色区域
- 一个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
相关产品推荐
相关产品推荐

