使用Plotly绘制各国频率等值区域图时底图加载失败报错
Plotly 世界地图分层设色实现方案
原代码报错核心原因
- 变量名拼写错误:合并数据集时调用了未定义的
yourdata变量,实际构造的国家统计DataFrame命名为data,直接触发NameError - 地理字段不匹配:配置
locationmode='ISO-3'时,locations参数传入的是国家全名字段,和ISO-3三字母国家编码规则不匹配,无法完成地理坐标映射 - 外部资源依赖问题:手动传入github仓库的geojson地址作为底图,受网络限制很容易加载失败,实际上绘制国家级choropleth图不需要手动引入外部geojson
- 数据集合并逻辑冗余:直接merge全量多年份的gapminder数据会产生大量重复行,没必要保留多余的年份、人口等无关字段
修正后可直接运行的代码
import pandas as pd import plotly.express as px # 读取gapminder基础数据,仅提取需要的国家名、ISO-3编码映射,去重避免重复行 country_map = px.data.gapminder()[['country', 'iso_alpha']].drop_duplicates() # 自定义的国家频率统计数据 d = { 'Australia':[3], 'Brazil' :[2], 'Canada':[6], 'Chile':[3], 'Denmark':[1], 'France':[16], 'Germany':[3], 'Israel':[1] } data = pd.DataFrame(d).T.reset_index() data.columns=['country', 'count'] # 合并ISO编码与统计数据,修正原变量名错误 df = pd.merge(country_map, data, how='left', on='country') # 绘制分层设色地图,使用内置地理边界无需外部geojson fig = px.choropleth( df, locations="iso_alpha", locationmode='ISO-3', color="count", color_continuous_scale="Blues", # 可自定义色阶 labels={'count':'统计频次'}, # 自定义图例名称 title='部分国家特定频率统计分布图' ) # 调整布局,优化显示效果 fig.update_geos(showcountries=True, countrycolor="lightgray", showcoastlines=True) fig.update_layout(margin={"r":0,"t":30,"l":0,"b":0}) fig.show()
实现效果说明
- 存在统计值的国家会按照
count字段的数值大小自动映射色阶,完成分层设色展示 - 无统计数据的国家默认显示为浅灰色背景,不会出现底图加载失败问题
- 不需要依赖外部geojson资源,调用Plotly内置地理底图即可稳定运行
原报错截图参考

内容的提问来源于stack exchange,提问作者Luisa Fernanda Velasquez Camac
相关产品推荐
相关产品推荐

