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

Choropleth地图颜色异常求助:整体显示单一颜色

解决Choropleth地图显示单一颜色的问题

我帮你排查了几个最可能导致这个问题的核心原因,你可以逐个验证修复:

1. 类型不匹配:GeoJSON的id与DataFrame的id类型不一致

这是这类问题最常见的诱因!看你的GeoJSON里,id是字符串类型(比如'13101'),但你的DataFrame里id列是整数类型(比如13121)。Plotly的choropleth在匹配key_on时会严格校验数据类型,类型不匹配就没法把DataFrame的数值和GeoJSON的区域关联起来,最终所有区域只能显示默认的单一颜色。

修复方法:把DataFrame里的id列转换成字符串类型:

df_tokyo['id'] = df_tokyo['id'].astype(str)

2. columns参数设置错误

choropleth的columns参数只需要传入两个值:第一个是用于和GeoJSON匹配的键列,第二个是用来映射颜色的数值列。你现在传入了三个列['Municipality', 'Positive Cases', 'id'],这会导致匹配逻辑混乱,无法正确关联数据和地理区域。

修复方法:修改columns为正确的两个列:

columns=['id', 'Positive Cases']

3. 检查threshold_scale的区间设置(可选)

如果上面两个修复后还是有问题,你可以检查一下threshold_scale的范围是否覆盖了你的Positive Cases的最小值和最大值。比如如果你的阈值是[0, 1000, 2000, 3000],但你的数据最大值是5255,那超过3000的区域都会用同一个颜色,看起来像是单一颜色。确保你的阈值区间包含了数据的全范围,比如:

threshold_scale = [0, 1500, 3000, 4500, 6000]

完整修复后的代码示例

把上面的修复整合后,你的代码应该是这样的:

# 先转换id类型,确保和GeoJSON中的id类型一致
df_tokyo['id'] = df_tokyo['id'].astype(str)

# 根据数据范围设置合理的阈值区间
threshold_scale = [0, 1500, 3000, 4500, 6000]

tokyo_map.choropleth(
    geo_data = tokyo_geojson,
    data=df_tokyo,
    columns=['id', 'Positive Cases'],  # 修正columns参数
    key_on = 'features.id',
    fill_color='Reds',
    threshold_scale=threshold_scale,
    fill_opacity=0.8,
    line_opacity=0.2,
    legend_name='Corona Cases in Tokyo',
    highlight = True,
    reset=True
)
tokyo_map

先试试前两个修复,这几乎肯定是你问题的根源!

内容的提问来源于stack exchange,提问作者Jaswanth sai G

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 11:37:39