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

Plotly Express Choropleth地图显示异常求助(加拿大PEI郡县)

问题分析与解决方案

核心问题点

  • 未定义PE_merged变量:代码直接调用了PE_merged,但未将地理边界数据(counties_PE)与人口密度数据(PE_popdensity)合并,Plotly无法建立地理区域和人口密度值的对应关系,这是地图异常的主要原因。
  • 代码缩进错误:fig.update_geos()和fig.show()前存在多余空格,Python是缩进敏感语言,会引发语法错误。
  • 冗余的GeoJSON文件操作:无需手动导出再读取GeoJSON,可直接使用GeoDataFrame的__geo_interface__属性传递地理数据给Plotly,简化流程。

修正后的完整代码

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

# 读取全国郡县边界数据
counties = gpd.read_file('lcd_000b16a_e.shp')
# 筛选PEI(PRUID=11)的郡县数据
counties_PE = counties.loc[counties['PRUID'] == '11']

# 读取人口密度数据并确保CDUID为字符串类型
PE_popdensity = pd.read_csv('County Population Density.csv')
PE_popdensity['CDUID'] = PE_popdensity['CDUID'].astype(str)
# 合并地理数据与人口密度数据(按CDUID匹配)
PE_merged = counties_PE.merge(PE_popdensity, on='CDUID', how='left')

# 绘制 choropleth 地图
fig = px.choropleth(
    PE_merged, 
    locations='CDUID', 
    featureidkey='properties.CDUID', 
    geojson=PE_merged.__geo_interface__,  # 直接使用GeoDataFrame的地理接口
    color='Pop_density', 
    height=600
)

# 更新地图设置,自动适配边界并隐藏基础地图
fig.update_geos(fitbounds='locations', visible=False)
# 显示地图
fig.show()

关键修正说明

  1. 数据合并:通过merge()方法将地理数据和人口密度数据按CDUID字段合并,确保每个郡县边界都能关联到对应的人口密度值。
  2. 缩进修正:去除update_geos和show前的多余空格,保证代码语法正确。
  3. 简化地理数据传递:使用PE_merged.__geo_interface__替代手动读写GeoJSON文件,既高效又避免文件操作可能带来的格式问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 10:55:22