Plotly地图可视化MMA选手国家分布时美国无颜色如何修复
问题修复方案
导致美国区域无颜色的核心原因有两类,可按以下步骤排查修复:
1. 优先排查国家名称匹配问题
你配置了locationmode = 'country names',Plotly要求传入的locations参数值必须和内置标准国家名称完全匹配,名称不匹配会导致区域无法识别、无法渲染颜色:
- 检查你的
index列表中美国的名称是否为United States,如果是USA、America、中文美国这类非标准名称都会匹配失败 - 可临时加一行代码验证匹配结果:
print([c for c in index if 'United' in c or 'USA' in c]),确认美国的名称是否符合标准
2. 修复颜色映射配置错误
你当前的色阶配置存在两处会导致最大值(美国选手数)显示异常的问题:
- 自定义colorscale的最大值端点
1对应的是浅灰色rgb(220,220,220),和地图背景色非常接近,会看起来像没有上色 - 关闭自动色阶后未手动设置
zmin和zmax,如果美国选手数远高于其他国家,会导致数值和色阶映射错位,搭配reversescale = True的反色逻辑,刚好把最大值映射到接近背景的浅灰色
可直接修改对应配置项:
- 手动补充z轴范围配置:
zmin = 0, zmax = max(values),确保数值范围和色阶完全匹配 - 把colorscale最大值对应的颜色改为高饱和深色,比如
[1,"rgb(172, 10, 5)"] - 不需要反色的话直接把
reversescale改为False
修复后的完整代码示例
data = [ dict( type = 'choropleth', locations = index, locationmode = 'country names', z = values, text = index, zmin = 0, zmax = max(values), colorscale = [[0,"rgb(5, 10, 172)"],[0.85,"rgb(40, 60, 190)"],[0.9,"rgb(70, 100, 245)"], [0.94,"rgb(90, 120, 245)"],[0.97,"rgb(106, 137, 247)"],[1,"rgb(172, 10, 5)"]], autocolorscale = False, reversescale = False, marker = dict( line = dict ( color = 'rgb(180,180,180)', width = 0.5 ) ), colorbar = dict( autotick = False, tickprefix = '', title = 'Countries Of Fighters'), ) ] layout = dict( title = 'Countries Of Fighters', geo = dict( showframe = False, showcoastlines = True, projection = dict( type = 'Mercator' ) ) ) fig = dict( data=data, layout=layout ) py.iplot( fig, validate=False)
内容的提问来源于stack exchange,提问作者Firat
相关产品推荐
相关产品推荐

