一般来说,vega-lite中的内联数据应该有这样的形式:
"data": {
"values": [
{"first column": "A", "second column": 28, "third column": 32},
{"first column": "B", "second column": 55, "third column": 94},
{"first column": "C", "second column": 43, "third column": 21},
...
]
}
我试图找出是否可以通过" transposing"更简洁地指定内联数据。数据。这样可以避免过多重复字段名称,即:
"data": {
"values": [
{"first column": ["A", "B", "C"]},
{"second column": [28, 55, 43]},
{"third column": [32, 94, 21]},
...
]
}
documentation of inline data含糊地提及values
字段:
这可以是对象或原始值的数组或字符串。原始值的数组作为具有数据属性的对象被摄取。
所以我能做的就是例如"values": ["A", "B", "C"]
。
如何使用这种原始内联数据?数据只有一个字段data
,这不足以在x + y轴上绘图。是否还有一个可以在轴编码中使用的自动生成的id
字段?或者是否可以将多个原始内联数据集合并到具有多个(命名)字段的数据集中?
紧凑型数据变体是否可以使用标准vega?
答案 0 :(得分:2)
您可以使用压缩数据,但必须先将其展开。 vega-lite的配置信息只是javascript,因此您可以使用如下函数:
asp:DropDownList
将压缩内联数据中的数据转换为vega-lite期望的数据版本。
查看我创建的工作示例:
https://beta.observablehq.com/@jjimenez/using-different-data-formats-with-vega-lite
当他们说“原始对象的数组被摄取为具有数据属性的对象”时,我认为它们意味着以下代码可以工作:
expand_data = compressed => {
const expanded = [];
const keys = compressed.map( r => Object.keys(r)[0]);
const keys_count = compressed.length;
const row_count = compressed[0][keys[0]].length;
for (let i = 0; i< row_count; i++) {
const new_row = {};
for (let j = 0; j < keys_count; j++) {
new_row[keys[j]] = compressed[j][keys[j]][i]
}
expanded.push(new_row);
}
return expanded;
}
... 价值观:[苹果,橘子,甜瓜]
苹果,橙子和甜瓜也可以附加其他属性或功能。
我在笔记本上添加了一张原创图表。
答案 1 :(得分:2)
合并https://github.com/vega/vega-lite/pull/3822后,您可以使用展平变换。有关Vega等效项,请参阅https://vega.github.io/vega/docs/transforms/flatten/。
输入
[
{"key": "alpha", "foo": [1, 2], "bar": ["A", "B"]},
{"key": "beta", "foo": [3, 4, 5], "bar": ["C", "D"]}
]
输出
[
{"key": "alpha", "foo": 1, "bar": "A"},
{"key": "alpha", "foo": 2, "bar": "B"},
{"key": "beta", "foo": 3, "bar": "C"},
{"key": "beta", "foo": 4, "bar": "D"},
{"key": "beta", "foo": 5, "bar": null}
]