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

使用Altair绘制带国家选择器的时序图为何呈锯齿状?

问题解决:Altair时序折线图锯齿状异常

问题现象

用Altair实现国家选择器功能时,生成的时序折线图呈现无规律的锯齿状(折线上下跳跃),但数据中每个年份理论上对应唯一行记录。

原因分析

  1. 重复数据干扰:同一国家同一年份可能存在多条重复记录(比如原始数据包含未过滤的分组维度,如性别、年龄组),导致单一年份对应多个Y轴数值,折线连接时出现上下跳动。
  2. 连接顺序问题:Altair的mark_line()默认按数据在DataFrame中的行顺序连接点,而非X轴的年份数值顺序。即使整体数据按年份排序,筛选单个国家后的数据行顺序仍可能出现混乱,导致折线连接逻辑错误。

解决步骤

步骤1:清理重复数据

先对同一国家同一年份的重复数据做聚合处理,比如取均值、最大值或最小值:

# 按国家和年份分组,聚合数值(示例取均值,可按需调整)
df_cropped = df_cropped.groupby(["Location", "Period"], as_index=False)["FactValueNumericHigh"].mean()

步骤2:强制按年份顺序连接折线

在折线图的X轴编码中指定按X轴值排序,确保折线严格按年份递增方向连接:

highlight = alt.Chart(df_cropped).mark_line().encode(
    alt.X("Period:O", sort='x'),  # 强制按年份顺序排序
    alt.Y("FactValueNumericHigh:Q"),
    color=alt.value('orange')
).transform_filter(
    country
).interactive()

如果年份是连续数值,也可以将X轴设为定量类型(Period:Q),Altair会自动按数值顺序连接折线。

完整修正后代码

import pandas as pd
import altair as alt

df = pd.read_csv("obesity_WHO.csv")
df_cropped = df.loc[:, ["Location", "Period", "FactValueNumericHigh"]]

# 清理重复数据:按国家+年份聚合
df_cropped = df_cropped.groupby(["Location", "Period"], as_index=False)["FactValueNumericHigh"].mean()

# 整体按年份排序
df_cropped = df_cropped.sort_values("Period")

# 定义国家下拉选择器
country = alt.selection_single(
    name="Location",
    fields=["Location"],
    init={"Location": "United Kingdom of Great Britain and Northern Ireland"},
    bind=alt.binding_select(options=list(df_cropped['Location'].unique()))
)

# 基础散点图(显示所有数据)
base = alt.Chart(df_cropped).mark_point().encode(
    alt.X("Period:O"),
    alt.Y("FactValueNumericHigh:Q"),
    color=alt.value('lightgray')
)

# 高亮折线图(仅显示选中国家,强制按年份排序)
highlight = alt.Chart(df_cropped).mark_line().encode(
    alt.X("Period:O", sort='x'),
    alt.Y("FactValueNumericHigh:Q"),
    color=alt.value('orange')
).transform_filter(
    country
).interactive()

# 组合图层并添加选择器
chart = alt.layer(base, highlight).add_selection(country)
chart.configure_view(fill="#fff").properties(width=600, height=300)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 18:13:26