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
相关产品推荐
相关产品推荐

