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

如何在VegaLite中对时间序列实现Y轴范围裁剪?

在VegaLite中实现Y轴范围裁剪的正确方法

针对你的需求——弱化新冠疫情期间的异常值,同时保持时间序列连续、避免误导性平段,推荐两种可靠方案:

方案1:数据转换限制Y值(推荐)

通过transform的calculate函数,将超出[-3,3]的Y值钳位到边界值,既保留时间点连续性,又不会生成平段:

{
  "data": {"url": "your-data-source.json"},
  "transform": [
    {"calculate": "clamp(datum.y, -3, 3)", "as": "y_clamped"}
  ],
  "mark": "line",
  "encoding": {
    "x": {"field": "date", "type": "temporal"},
    "y": {"field": "y_clamped", "type": "quantitative", "scale": {"domain": [-3, 3]}}
  }
}
  • clamp()函数自动将大于3的值设为3,小于-3的值设为-3,中间值保持不变
  • 时间序列不会中断,异常值被压缩到Y轴边界,弱化视觉冲击

方案2:绘图区裁剪(适合无需显示边界点的场景)

设置Y轴数据域为[-3,3],并开启mark的clip属性,超出轴范围的线段部分会被直接裁剪,不会出现平段或空白:

{
  "data": {"url": "your-data-source.json"},
  "mark": {"type": "line", "clip": true},
  "encoding": {
    "x": {"field": "date", "type": "temporal"},
    "y": {"field": "y", "type": "quantitative", "scale": {"domain": [-3, 3]}}
  }
}
  • 超出[-3,3]的数据点和线段会被裁剪,但可见范围内的序列依然连续
  • 不会生成误导性平段,也不会导致图表空白

之前方法失效的原因

  • rangeMin/rangeMax是设置画布像素范围,而非数据域,会导致图表逻辑崩溃
  • domainMin/domainMax + clamp: true会强制所有超出值映射到边界,生成误导性平段
  • 将异常值转为null会丢失时间点,直接中断时间序列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 18:25:54