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
相关产品推荐
相关产品推荐

