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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 01:15:50