如何在Vega中转换嵌套JSON数据以绘制Days-Value折线图?
Vega数据转换:提取groups并生成折线图所需表格格式
问题背景
原始JSON数据格式:
{"groups":[{"days":[17,22,23,27,31],"experiment":"S1","value":[[19.77,23.92,22.19,20.47,25.85],[21.78,21.33,19.35,19.06,21.38],[18.86,24.47,19.40,20.50,24.13]]},{"days":[18,23,24,29,31],"experiment":"S2","value":[[12.77,24.92,27.19,21.47,29.85],[21.78,21.33,19.35,19.06,21.38],[18.86,24.47,19.40,20.50,24.13]]}, {"days":[27,32,33,37,41],"experiment":"S3","value":[[19.77,23.92,22.19,20.47,25.85],[21.78,21.33,19.35,19.06,21.38],[18.86,24.47,19.40,20.50,24.13]]}],"individuals":[]}
需求:将数据转换为包含experiment、day(原days数组拆分后)、value(原嵌套数组拆分后)的表格格式,用于绘制折线图。
现有数据加载代码:
"data": [ { "name": "table", "url": "path_to_json", "transform": [ ## 需要在此添加筛选groups并丢弃individuals的转换步骤 { "type": "flatten", "fields": ["value"], "as": ["value"] }, { "type": "flatten", "fields": ["value", "days"], "as": ["value", "day"] }] }
解决方案
在现有转换流程的最开头添加两个步骤,实现提取groups数据并丢弃无关字段:
完整转换代码如下:
"data": [ { "name": "table", "url": "path_to_json", "transform": [ { "type": "flatten", "fields": ["groups"], "as": ["group"] }, { "type": "project", "fields": ["group.experiment", "group.days", "group.value"], "as": ["experiment", "days", "value"] }, { "type": "flatten", "fields": ["value"], "as": ["value"] }, { "type": "flatten", "fields": ["value", "days"], "as": ["value", "day"] } ] } ]
步骤说明
- 第一步flatten:将原始数据顶层的
groups数组展开,每个数组元素(单个实验组数据)转为独立条目,用group字段存储。 - 第二步project:从
group字段中提取experiment、days、value属性并重命名为对应字段,自动丢弃原始数据的individuals字段和临时group字段。 - 后续两个flatten步骤:继续拆分嵌套的
value数组,最终生成每行对应一组experiment、day、value的表格格式,满足折线图的数据要求。
内容的提问来源于stack exchange,提问作者Osman Mamun
相关产品推荐
相关产品推荐

