如何用Python及自有数据制作含美国各州及DC的Plotly Choropleth Map
解决包含DC的美国州级Choropleth图实现方案
问题根源
Plotly内置locationmode='USA-states'模式匹配的矢量边界数据源本身未纳入哥伦比亚特区(DC)的几何信息,因此即使传入DC的州代码也无法匹配显示;而create_choropleth方法默认绑定的是全美县级粒度矢量数据,无法满足州级粒度的展示需求。
可落地实现路径
放弃Plotly内置的定位模式,使用覆盖50个州+DC的州级粒度geojson自定义数据源匹配自有数据,完全可以同时满足州级粒度展示、包含DC的需求,具体实现步骤如下:
- 数据源准备
准备符合三个要求的州级矢量geojson文件:- 几何粒度为州级,无县级拆分
- 每个几何的属性字段中存储对应行政区的两字母缩写(和自有数据里
statecode列的取值规则一致,比如DC、CA、NY) - 确认数据源明确包含DC的多边形边界,避免出现只有50个州、遗漏DC的情况
- 基于
go.Choropleth的代码调整
替换原有内置定位模式的逻辑,传入自定义geojson并配置正确的匹配规则,修正后的可运行代码示例:import plotly.graph_objects as go import json # 读取准备好的、覆盖50州+DC的州级geojson with open("your_state_level_geo_data.geojson", "r", encoding="utf-8") as f: usa_state_geo = json.load(f) fig = go.Figure(data=go.Choropleth( geojson=usa_state_geo, locations=df['statecode'], # 匹配geojson中存储两字母州缩写的属性路径,需和实际geojson字段保持一致 featureidkey="properties.state_abbr", z=df['buyers'].astype(float), colorscale='Reds', autocolorscale=False, text=df['mytext'], marker_line_color='white', colorbar_title="Total buyers" )) # 调整地图显示范围,适配美国本土视图 fig.update_geos( scope="usa", projection_type="albers usa", showlakes=True, lakecolor="rgb(255, 255, 255)" ) - 方案注意事项
- 重点核对
featureidkey的配置值:不同来源的geojson存储州缩写的字段路径存在差异,若字段路径不匹配会出现数据和几何对不上的问题 create_choropleth方法的设计逻辑就是面向县级粒度展示,如果要坚持使用该方法,需要手动从县级数据中过滤聚合到州级边界,整体实现成本远高于上述自定义geojson的go.Choropleth方案,不推荐优先选择
- 重点核对
常见踩坑提示:部分公开的美国州级边界数据源默认只收录50个州的几何,未单独纳入DC的边界,选取数据源时需要提前确认覆盖范围。
内容的提问来源于stack exchange,提问作者studentcoder
相关产品推荐
相关产品推荐

