获取阿根廷省份GeoJSON数据后无法绘制Plotly地图求助
解决Plotly Express绘制阿根廷省份地图失败的问题
核心问题与修复方案
1. 修正ID字段的数据类型不匹配
根据提供的df4数据结构,provincia_id为数值类型,但GeoJSON文件中的properties.id是字符串类型,两者类型不匹配会导致区域无法关联。执行以下代码转换类型:
# 将DataFrame中的provincia_id转为字符串 df4['provincia_id'] = df4['provincia_id'].astype(str)
2. 确认GeoJSON的ID字段正确性
先打印GeoJSON的第一个特征属性,验证ID字段的键名是否为id:
# 查看GeoJSON中第一个区域的属性结构 print(ar_regions_geo['features'][0]['properties'])
如果输出中的ID字段不是id(比如是codigo或其他名称),需要同步修改featureidkey参数,例如:
featureidkey='properties.codigo' # 替换为实际的键名
3. 过滤无效匹配数据
检查并移除df4中与GeoJSON不匹配的provincia_id,避免无效数据干扰渲染:
# 提取GeoJSON中的所有有效ID geo_ids = [feat['properties']['id'] for feat in ar_regions_geo['features']] # 保留仅匹配的行 df4 = df4[df4['provincia_id'].isin(geo_ids)]
4. 优化地图显示参数
默认的fitbounds可能无法精准适配阿根廷区域,手动设置中心坐标和缩放级别:
fig.update_geos( showcountries=True, showcoastlines=True, showland=True, center={"lat": -38.4161, "lon": -63.6167}, # 阿根廷地理中心坐标 projection_scale=4, # 缩放级别,可根据需求调整 fitbounds="locations" )
完整修复代码
import pandas as pd import requests import plotly.express as px df4 = pd.read_excel('provincias.xls') # 转换ID类型为字符串,匹配GeoJSON格式 df4['provincia_id'] = df4['provincia_id'].astype(str) repo_url = 'https://infra.datos.gob.ar/catalog/modernizacion/dataset/7/distribution/7.12/download/provincias.geojson' ar_regions_geo = requests.get(repo_url).json() # 过滤仅匹配的省份数据 geo_ids = [feat['properties']['id'] for feat in ar_regions_geo['features']] df4 = df4[df4['provincia_id'].isin(geo_ids)] fig = px.choropleth( data_frame=df4, geojson=ar_regions_geo, locations='provincia_id', featureidkey='properties.id', color='Total', color_continuous_scale="burg", title='阿根廷省份数据可视化' ) fig.update_geos( showcountries=True, showcoastlines=True, showland=True, center={"lat": -38.4161, "lon": -63.6167}, projection_scale=4 ) fig.show()
内容的提问来源于stack exchange,提问作者juan esteban arilla
相关产品推荐
相关产品推荐

