使用Plotly绘制美国各州人口填充地图出现空白的解决方法
修复Plotly choropleth_mapbox美国州地图空白问题
核心排查与修复步骤
确认字段匹配一致性
先检查你用的GeoJSON文件,里面的州名属性是NAME(比如"Alabama"),得保证df_state里的NAME字段和GeoJSON里的名称完全对应——别出现大小写不一致、简称/全称错位(比如"NY" vs "New York")的情况。可以用print(df_state['NAME'].unique())输出数据框里的州名,再和GeoJSON的features属性对比。配置Mapbox访问令牌
Plotly的mapbox底图必须用有效令牌才能加载,这是空白的常见原因。去Mapbox官网免费领一个令牌,然后在代码里加上:import plotly.express as px px.set_mapbox_access_token("你的Mapbox令牌")调整地图中心与缩放
默认的中心和缩放可能偏了,导致地图显示在看不见的区域。美国地图合适的中心坐标是lat=39.8283, lon=-98.5795,缩放级别设为3左右就行。确保人口字段是数值类型
检查Total Population字段是不是int或float类型,如果是字符串得转成数值:df_state['Total Population'] = pd.to_numeric(df_state['Total Population'], errors='coerce')验证GeoJSON加载是否正常
先加载GeoJSON检查结构,避免文件损坏或加载错误:import json with open("gz_2010_us_040_00_5m.json") as f: geojson_data = json.load(f) # 打印第一个州的属性,确认字段 print(geojson_data['features'][0]['properties'])
修复后的完整代码示例
import plotly.express as px import pandas as pd import json # 加载本地GeoJSON文件 with open("gz_2010_us_040_00_5m.json") as f: us_states_geojson = json.load(f) # 这里模拟你的df_state数据框,实际替换成你的数据加载逻辑 df_state = pd.DataFrame({ 'NAME': ['Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California'], 'Total Population': [4903185, 731545, 7278717, 3017804, 39538223] }) # 确保人口字段是数值型 df_state['Total Population'] = pd.to_numeric(df_state['Total Population'], errors='coerce') # 设置Mapbox令牌 px.set_mapbox_access_token("你的Mapbox访问令牌") # 生成 choropleth_mapbox 地图 fig = px.choropleth_mapbox( df_state, geojson=us_states_geojson, locations='NAME', # 数据框中用于匹配的字段 featureidkey="properties.NAME", # GeoJSON中对应的属性字段 color='Total Population', color_continuous_scale="Viridis", mapbox_style="carto-positron", zoom=3, center={"lat": 39.8283, "lon": -98.5795}, opacity=0.5, labels={'Total Population': '总人口'} ) # 去掉多余边距,让地图占满容器 fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0}) fig.show()
额外排查点
- 如果是在Jupyter这类在线环境里,试试用
fig.show(renderer='browser')渲染,可能是默认渲染器的问题。 - 重新下载GeoJSON文件,确认文件没有损坏或不完整。
内容的提问来源于stack exchange,提问作者Demi
相关产品推荐
相关产品推荐

