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

基于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()

额外验证步骤

  1. 检查df里的District列:确保所有值都能在GeoJSON的properties.District中找到,没有缺失或格式错误
  2. 检查Total Population列:确认没有空值、非数值内容,否则颜色映射会失效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:25:24