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()
关键修正说明
- 数据合并:通过
merge()方法将地理数据和人口密度数据按CDUID字段合并,确保每个郡县边界都能关联到对应的人口密度值。 - 缩进修正:去除
update_geos和show前的多余空格,保证代码语法正确。 - 简化地理数据传递:使用
PE_merged.__geo_interface__替代手动读写GeoJSON文件,既高效又避免文件操作可能带来的格式问题。
内容的提问来源于stack exchange,提问作者wind4life
相关产品推荐
相关产品推荐

