基于Plotly Python绘制宾州选区人口热力图遇问题求助
宾夕法尼亚州选区热力图错误修复方案
核心问题分析
你的代码出现错误,大概率是以下几个原因:
- 选区编号类型不匹配:GeoJSON里的选区编号是字符串,而你数据集
df里的District可能是整数,导致Plotly无法匹配对应选区 - GeoJSON处理冗余:没必要手动重构GeoJSON,直接用原始数据并指定匹配字段更可靠
- 列名大小写不一致:代码里写的
'Total population',如果数据集实际列名是'Total Population',会导致无法读取数值
修正后的完整代码
import json import pandas as pd import plotly.express as px from urllib.request import urlopen # 加载宾州选区GeoJSON数据 api_url = "https://www.redistricting.state.pa.us/Resources/GISData/Districts/Legislative/House/2021-Final/JSON/2022%20LRC-House-Final.json" with urlopen(api_url) as response: pa_geo = json.load(response) # 关键:把数据集里的District转为字符串,和GeoJSON中的编号类型统一 df['District'] = df['District'].astype(str) # 绘制热力图,指定featureidkey关联GeoJSON的properties.District字段 fig = px.choropleth( df, geojson=pa_geo, locations='District', # 数据集里的匹配字段 color='Total Population', # 确保和你数据集的列名完全一致 featureidkey="properties.District", # GeoJSON里的匹配字段 scope='usa' ) # 调整地图显示,聚焦宾州,隐藏默认地图元素 fig.update_geos(fitbounds="locations", visible=False) fig.update_layout(title="宾州议会选区总人口热力图") fig.show()
额外验证步骤
- 检查
df里的District列:确保所有值都能在GeoJSON的properties.District中找到,没有缺失或格式错误 - 检查
Total Population列:确认没有空值、非数值内容,否则颜色映射会失效
内容的提问来源于stack exchange,提问作者Demi
相关产品推荐
相关产品推荐

