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

使用GeoJSON绘制英格兰地方当局Plotly Choropleth地图渲染异常

故障原因

你遇到的渲染异常由三个配置错误共同导致:

  • scope="europe"参数误用:该参数仅对Plotly官方内置的预制行政边界生效,加载自定义GeoJSON时调用会强制套用内置欧洲区域的坐标系和视图逻辑,和你导入的英国地方当局边界坐标不兼容
  • 缺少边界自适应配置:使用自定义GeoJSON绘图必须显式设置fitbounds="locations",否则Plotly默认加载全球尺度视图,你导入的小面积行政区会被压缩成无法分辨边界的聚合色块
  • 色阶范围设置不合理:你的测试数据Val列取值为0到地方当局总序号(英国该级行政区共300+个),但你硬编码range_color=(0, 12),所有取值大于12的区域都会被渲染为色阶顶端的明黄色,完全看不到分区数值差异。

你给GeoJSON要素注入id字段、关联DataFrame的逻辑是正确的,不需要调整。

修复后可直接运行的代码
from urllib.request import urlopen
import json
import pandas as pd
import plotly.express as px

# 加载本地GeoJSON文件
with urlopen('file:///Users/thomasvalentine/Downloads/Local_Authority_Districts_(December_2021)_GB_BFC.json') as response:
    Local_authorities = json.load(response)

la_data = []
# 遍历GeoJSON为每个要素注入匹配用id,同时生成测试数据
for i in range(len(Local_authorities["features"])):
    la_name = Local_authorities["features"][i]['properties']['LAD21NM']
    Local_authorities["features"][i]['id'] = la_name
    la_data.append([la_name, i])

# 构造测试DataFrame
df = pd.DataFrame(la_data, columns=['LA', 'Val'])

# 绘制等值区域图
fig = px.choropleth(
    df,
    geojson=Local_authorities,
    locations='LA',
    color='Val',
    color_continuous_scale="Viridis",
    fitbounds="locations", # 自动缩放到自定义GeoJSON的边界范围
    range_color=(0, df['Val'].max()), # 色阶匹配实际数据范围
    labels={'Val': 'value'}
)

# 关闭默认的世界底图,移除多余边距
fig.update_geos(visible=False)
fig.update_layout(margin={"r": 0, "t": 0, "l": 0, "b": 0})
fig.show()
可选优化

如果需要叠加道路、地名等常规地图底图,可以将px.choropleth替换为px.choropleth_mapbox,配置个人Mapbox Token即可,GeoJSON和DataFrame的关联逻辑不需要改动,视图自适应、色阶配置参数完全通用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:48:20