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

Plotly Choropleth_mapbox绘制乌拉圭失业率地图无着色问题求助

解决Plotly Choropleth_mapbox乌拉圭行政区地图无法渲染着色问题

你的代码核心问题在于使用了蒙特利尔选区的GeoJSON数据(px.data.election_geojson()),而非乌拉圭行政区的地理数据,同时保留了无关的选举示例数据(df = px.data.election()),这导致数据与地理边界无法匹配,自然渲染不出着色区域。以下是具体修复步骤:

关键修复点

  • 替换GeoJSON数据:必须使用包含乌拉圭各行政区(Departamentos)的GeoJSON文件,确保其properties字段中包含与你的uruguay数据框Depto列对应的行政区名称。
  • 匹配名称一致性:检查uruguay["Depto"]的所有值,与GeoJSON中properties里的行政区名称完全一致(包括大小写、拼写、特殊字符,比如是否带重音符号)。
  • 清理无关代码:移除示例中的df = px.data.election(),这部分对你的需求毫无作用。

修正后的示例代码

假设你已获取乌拉圭行政区的GeoJSON文件(比如命名为uruguay_deptos.geojson),且uruguay数据框的Depto列与GeoJSON中properties.NOMBRE字段匹配:

import plotly.express as px
import json

# 加载乌拉圭行政区GeoJSON
with open("uruguay_deptos.geojson", "r") as f:
    uruguay_geojson = json.load(f)

# 假设uruguay数据框结构:Depto(行政区名称)、Unemp_rate(失业率)
fig = px.choropleth_mapbox(
    uruguay,
    geojson=uruguay_geojson,
    color="Unemp_rate",
    locations="Depto",
    # 替换为GeoJSON中对应的属性键,比如properties.NOMBRE或properties.Depto
    featureidkey="properties.NOMBRE",
    center={"lat": -33.3816, "lon": -56.5245},
    mapbox_style="carto-positron",
    zoom=5.5
)
fig.update_layout(margin={"r":0,"t":0,"l":0,"b":0})
fig.show()

额外验证步骤

如果仍无法渲染,先检查名称匹配情况:

# 提取GeoJSON中的所有行政区名称
geojson_deptos = {feat["properties"]["NOMBRE"] for feat in uruguay_geojson["features"]}
# 提取数据框中的行政区名称
df_deptos = set(uruguay["Depto"].unique())

# 检查不匹配的项
print("数据框中存在但GeoJSON没有的行政区:", df_deptos - geojson_deptos)
print("GeoJSON中存在但数据框没有的行政区:", geojson_deptos - df_deptos)

如果输出非空,说明存在名称不匹配,需要统一两边的名称格式(比如去掉重音、统一大小写)。

内容的提问来源于stack exchange,提问作者Mateo Severi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 20:06:29