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

Vega-Lite中如何展示区间选择的统计详情(含无选择时全局统计)

Vega-Lite 统计信息展示需求

在Vega-Lite可视化图表中实现以下效果:

  • 用户进行区间选择时,展示选中数据的统计详情
  • 未进行选择时,展示全局数据的统计信息
    统计内容需包含:
  • 选中值的首尾指定字段
  • 选择范围
  • 选中值数量
  • 选中值均值
    统计文本以表格形式呈现,优先放置在图例下方或图表右上角。

数据生成代码

import datetime
import random
import json

dt2 = datetime.datetime.now()
ydt = datetime.timedelta(days=365)
dt1 = dt2 - ydt
dt1 = dt1.timestamp()
dt2 = dt2.timestamp()
times = [random.uniform(dt1, dt2) for i in range(10**5)]
times.sort()
values = []
for t in times:
    d = {}
    t = datetime.datetime.fromtimestamp(t)
    t = t.isoformat(" ", timespec="seconds")
    v = random.uniform(0, 1000)
    c = random.randint(0,1)
    d["time"] = t
    d["data"] = v
    d["category"] = c
    values.append(d)

with open("./test.json", "wt") as f:
    json.dump(values[:10**4], f)

现有实现问题

  • 统计文本图层依赖单行数据,使用aggregate transform聚合后,无brush选择时不会生成数据行,无法展示全局统计
  • 尝试使用自定义JS transform解决,但Vega-Lite中无法加载该transform
  • 虽可通过pluck函数在expr中完成聚合计算,但仍需在transform块中过滤数据,导致无选择时文本expr不会绘制
  • 尝试将transform置于dataset块或让data包含数据对象列表的方案均无效,目前临时方案为添加隐藏标记的单独图层,但不够优雅

后续尝试方向

  • 将filter transform移入expr(借助clamp函数),使用单行数据源
  • 若可行,将expr结果存入params作为signal
  • 若仍有问题,创建自定义JS expression function,缓存中间结果以保障性能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 22:58:21