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

使用Plotly choropleth_mapbox动画时未显示全部离散值求助

问题排查与解决思路

核心原因推测及验证步骤

  • 部分年份缺失离散值:尽管你确认年份和Code列有数据,但某个年份的Range de veillisement可能只包含2个取值。Plotly动画会基于全局图例展示,若某一年缺失某个值,图例就会隐藏该类别。用以下代码快速验证:
# 查看各年份的离散值数量
print(df_FR_1.groupby('Year')['Range de veillisement'].nunique())
# 查看每个年份的具体取值分布
for year in df_FR_1['Year'].unique():
    print(f"Year {year}: {df_FR_1[df_FR_1['Year']==year]['Range de veillisement'].unique()}")
  • 数据类型或格式不一致:Range de veillisement字段可能存在隐形格式差异(比如空格、大小写不同,或混合字符串/数值类型),导致Plotly将同一类别识别为不同项。检查数据一致性:
# 查看所有离散值的计数,确认是否存在异常项
print(df_FR_1['Range de veillisement'].value_counts())
# 检查字段数据类型
print(df_FR_1['Range de veillisement'].dtype)
  • 地理编码匹配失效:部分年份的Code值可能与geojson中的properties.code不匹配,导致对应区域无法渲染,进而让该年份的离散值未被纳入全局统计。验证匹配情况:
# 提取geojson中的所有有效编码
geo_codes = [feat['properties']['code'] for feat in geo_reg['features']]
# 检查各年份是否存在未匹配的编码
for year in df_FR_1['Year'].unique():
    unmatched = df_FR_1[df_FR_1['Year']==year]['Code'].loc[~df_FR_1[df_FR_1['Year']==year]['Code'].isin(geo_codes)]
    if len(unmatched) > 0:
        print(f"Year {year} 未匹配编码: {unmatched.tolist()}")
  • Plotly版本bug:旧版Plotly在处理离散值动画时存在兼容性问题,尝试升级到最新版:
pip install --upgrade plotly

快速修复方案

如果确认是部分年份缺失离散值导致的问题,可以手动指定category_orders参数,强制Plotly保留所有3个离散值的图例:

px.choropleth_mapbox(df_FR_1, geojson = geo_reg, locations = 'Code', color = 'Range de veillisement',
                    featureidkey="properties.code", mapbox_style="white-bg",
                    center = {'lat': 46.5, 'lon': -0.1}, zoom = 4.1, animation_frame = 'Year',
                    # 替换为你的3个离散值实际内容
                    category_orders={'Range de veillisement': ['离散值1', '离散值2', '离散值3']}
                    )

内容的提问来源于stack exchange,提问作者Jorge Mariano Mamani Soria

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 20:48:15