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

Plotly choropleth_mapbox绘制法国选举地图出现孔洞如何解决

问题根本原因
  • 你调用px.choropleth_mapbox时缺失了featureidkey参数配置。Plotly的等值区地图默认匹配逻辑是:拿locations传入的数据集字段值,去对应GeoJSON每个要素顶层的id属性做关联,不会自动检索properties下的字段。你使用的法国省界GeoJSON中,省编码存储在properties.code路径下,没有映射到要素顶层id字段,导致大量省要素匹配失败、无法渲染填充色,看起来就是地图上的孔洞。这也解释了为什么你用mapshaper打开GeoJSON显示正常(工具直接渲染所有几何图形,不做属性关联)、核查选举数据集也找不到缺失值——问题出在关联逻辑,而非数据源本身损坏。
  • 少数局部孔洞的诱因是省编码格式不统一:选举数据集的CodeDépartement列包含科西嘉地区的2A、2B这类非纯数字编码,如果读取时把两边的关联字段分别解析成了数值型、字符串型,或者存在前导零、首尾空格的差异,也会导致个别区域匹配失败。
修复方法
  1. 读取数据时显式指定关联字段为字符串类型,避免编码被自动转成数值导致匹配失败
  2. 传入featureidkey参数,明确告诉Plotly去GeoJSON的哪个属性路径下找匹配的省编码
  3. 可选通过集合差集校验两边的编码值是否完全一一对应,提前排查不匹配项

修复后的可运行代码如下:

import geopandas as gpd
import pandas as pd
import plotly.express as px

# 读取时统一指定省编码为字符串类型,避免2A/2B类编码解析错误
t1 = pd.read_csv('p2022-resultats-departement-t1.csv', dtype={'CodeDépartement': str})
geo = gpd.read_file('a-dep2021.json', dtype={'code': str})

# 可选校验:放开注释运行,输出为空则代表两边编码完全匹配
# print("选举数据存在但GeoJSON缺失的编码:", set(t1['CodeDépartement']) - set(geo['code']))
# print("GeoJSON存在但选举数据缺失的编码:", set(geo['code']) - set(t1['CodeDépartement']))

fig = px.choropleth_mapbox(
    t1,
    locations='CodeDépartement',
    geojson=geo,
    featureidkey="properties.code", # 核心配置:指定GeoJSON中用于匹配的属性路径
    color='你要可视化的选举指标列名', # 替换为你实际要展示的得票率/得票数字段
    mapbox_style='carto-positron',
    center={'lat': 47.7516, 'lon': 1.6751},
    zoom=4,
    opacity=0.8
)
fig.update_layout(margin={'l': 10, 'r': 10, 't': 10, 'b': 10})
fig.show()

如果校验时发现存在不匹配的编码,对两列做简单的字符串清洗(去除首尾空格、统一大小写)即可解决。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.06 16:15:42