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

Vega-Altair中transform_aggregate()导致图表空白问题求助

问题原因及解决方法

核心原因:无分组聚合会丢失原始字段

当你使用transform_aggregate(groupby=[])时,Vega-Lite会把整个数据集聚合为唯一的一行数据,只保留你定义的聚合字段(这里是avg),原始的year和wheat字段会被丢弃:

  • 第一个空白图表:你在encode里引用的year:O和wheat:Q在聚合后的数据中根本不存在,自然没有内容可显示。
  • 第二个空白图表:聚合后没有wheat字段,transform_calculate里的datum.wheat会返回空值,导致norm全是NaN,同样没有有效数据渲染图表。

正确实现:用窗口变换保留原始数据

如果要基于全局平均值做归一化,应该用transform_window而不是transform_aggregate——窗口变换可以在保留所有原始数据行的同时,计算全局统计量:

from vega_datasets import data
import altair as alt

alt.Chart(data.wheat()).mark_bar().encode(
    alt.X('year:O'),
    alt.Y('norm:Q')
).transform_window(
    avg='mean(wheat)',  # 计算全局小麦产量平均值
    frame=[None, None]  # 指定窗口覆盖整个数据集
).transform_calculate(
    norm='datum.wheat / datum.avg'
)

这个代码会保留每一行的year和wheat,同时新增全局的avg字段,最终正确计算并渲染归一化后的柱状图。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 04:02:03