如何使用Plotly绘制毛里求斯分区级choropleth等值地图
核心故障原因
px.choropleth 调用自定义GeoJSON绘制次级行政区地图时,传入locationmode='country names'、geo_scope这类参数会强制触发Plotly内置公共边界库的匹配逻辑,完全覆盖你传入的自定义毛里求斯行政区GeoJSON,直接导致要素匹配失败、无图形渲染。
分步修复方案
- 移除所有内置地图相关参数
删掉代码里的locationmode='country names'、geo_scope='africa'/'world'配置,这类参数仅适配Plotly自带的全球/国家层级边界,和你本地的自定义一级行政区GeoJSON完全不兼容。 - 显式指定GeoJSON与DataFrame的匹配规则
给px.choropleth传入三个必填的自定义GeoJSON相关参数:geojson:传入你读取完成的毛里求斯行政区GeoJSON对象locations:传入DataFrame中存储行政区匹配键的列,如果你用行政区名称匹配就传df['Location'],用提前映射好的id匹配就传对应id列featureidkey:指定GeoJSON中用于匹配的属性路径,必须带properties.前缀:如果用行政区名称匹配就设为"properties.name_1",如果用id匹配就设为"properties.id_1"
- 保留自动适配边界配置
保留fig.update_geos(fitbounds="locations", visible=False)配置即可,该逻辑会自动根据你传入的GeoJSON要素范围,将视图缩放到毛里求斯行政区全域,不需要额外设置中心点、缩放等级。 - 坐标系校验(可选排查项)
如果完成上述配置后仍无渲染,检查GeoJSON坐标系是否为WGS84(EPSG:4326),Plotly仅支持未投影的经纬度格式GeoJSON,若为其他投影坐标系需先做坐标转换。
最小可运行代码示例
import pandas as pd import plotly.express as px import json # 加载本地数据 with open("毛里求斯行政区GeoJSON文件路径.json", "r", encoding="utf-8") as f: mu_geojson = json.load(f) # 注意制表符分隔文件必须指定sep="\t" job_df = pd.read_csv("LocationJobCount.csv", sep="\t") # 绘制分区填色图 fig = px.choropleth( job_df, geojson=mu_geojson, locations="Location", featureidkey="properties.name_1", # 若用id_1匹配则修改为"properties.id_1" color="岗位计数字段名", # 替换为你csv中存储岗位数量的实际字段名 color_continuous_scale="Blues" ) # 自动适配边界 fig.update_geos(fitbounds="locations", visible=False) fig.show()
高频踩坑提醒
featureidkey参数必须加properties.前缀,GeoJSON的所有属性字段都存储在每个要素的properties节点下,直接写字段名会匹配失败- 读取csv时必须指定
sep="\t",否则会把制表符识别为普通字符,导致Location字段读取错误、和GeoJSON属性匹配不上 - 不需要额外给GeoJSON手动设置id字段,通过
featureidkey指定属性路径即可完成匹配
内容的提问来源于stack exchange,提问作者kelvin
相关产品推荐
相关产品推荐

