Vega Lite:如何基于数据设置参数数组的最大值
问题
我是Vega Lite新手,现有一个硬编码为[0, 6]的参数数组myExtent,希望基于数据动态设置其上限值:将上限设为数据集中flag=1的行对应的score值(示例中为6)。我尝试过拆分参数的方式但未成功,想请教是否可行及实现方法。
原代码示例:
{"$schema": "https://vega.github.io/schema/vega-lite/v5.json", "params": [ {"name": "myExtent", "value": [0, 6]} ], "data": { "values": [ {"game": 1, "score": 2, "flag": 0}, {"game": 2, "score": 4, "flag": 0}, {"game": 3, "score": 5, "flag": 0}, {"game": 4, "score": 6, "flag": 1}, {"game": 5, "score": 9, "flag": 0} ] }, "mark": {"type": "area"}, "transform": [ { "density": "score", "extent": {"signal": "myExtent"} } ], "encoding": { "x": {"field": "value", "type": "quantitative", "scale": {"domain": [0, 10]}}, "y": {"field": "density", "type": "quantitative"} } }
我曾尝试以下写法但未奏效,且未解决动态获取目标score值的问题:
"params": [ {"name": "upperLimit", "value": 6}, {"name": "myExtent", "value": [0, {"expr": "upperLimit"}]} ],
解决方案
可行,通过数据驱动的参数计算即可实现,具体修改如下:
修改后的完整代码
{"$schema": "https://vega.github.io/schema/vega-lite/v5.json", "data": { "values": [ {"game": 1, "score": 2, "flag": 0}, {"game": 2, "score": 4, "flag": 0}, {"game": 3, "score": 5, "flag": 0}, {"game": 4, "score": 6, "flag": 1}, {"game": 5, "score": 9, "flag": 0} ] }, "params": [ { "name": "upperLimit", "expr": "data('source_0').filter(d => d.flag === 1)[0].score" }, { "name": "myExtent", "expr": "[0, upperLimit]" } ], "mark": {"type": "area"}, "transform": [ { "density": "score", "extent": {"signal": "myExtent"} } ], "encoding": { "x": {"field": "value", "type": "quantitative", "scale": {"domain": [0, 10]}}, "y": {"field": "density", "type": "quantitative"} } }
核心说明
upperLimit参数通过expr直接从默认数据源source_0中过滤出flag=1的行,提取第一行的score值作为上限myExtent参数用expr动态构建数组[0, upperLimit],彻底替代硬编码的固定值- Vega Lite的参数
expr字段支持直接对数据集进行筛选、取值操作,无需额外添加数据转换步骤
内容的提问来源于stack exchange,提问作者sc20d
相关产品推荐
相关产品推荐

