1

一般来说,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},
    ...
  ]
}

我试图找出是否可以通过“转置”数据来更简洁地指定内联数据。这将避免字段名称的过度重复,即:

"data": {
  "values": [
    {"first column": ["A", "B", "C"]}, 
    {"second column": [28, 55, 43]}, 
    {"third column": [32, 94, 21]},
    ...
  ]
}

内联数据的文档含糊地提到了该values领域:

这可以是对象数组或原始值或字符串。原始值数组作为具有数据属性的对象被摄取。

所以我所能做的就是例如"values": ["A", "B", "C"]

我怎样才能利用这种原始的内联数据?数据只有一个字段data,不足以在 x + y 轴上绘制。是否还有id可用于轴编码的自动生成字段?或者是否可以将多个原始内联数据集组合成具有多个(命名)字段的数据集?

标准 vega 是否可以使用紧凑数据变体?

4

2 回答 2

2

合并https://github.com/vega/vega-lite/pull/3822后,您可以为此使用 flatten 变换。有关 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}
]
于 2018-06-08T15:40:42.440 回答
2

您可以使用压缩数据,但您必须先对其进行扩展。vega-lite 的配置信息只是 javascript,因此您可以使用如下函数:

  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;
}

将数据从压缩的内联数据中获取到 vega-lite 期望的数据版本。

查看我创建的一个工作示例:

https://beta.observablehq.com/@jjimenez/using-different-data-formats-with-vega-lite

当他们说“原始对象数组作为具有数据属性的对象被摄取”时,我认为他们的意思是以下代码可以工作:

let apple = { label: 'apple', data: { size: 'small', weight: 12, color: 'red'} };
let orange = { label: 'orange', data: {size: 'small', weight: 13, color: 'orange'}};
let melon = {label: 'melon', data: {size: 'large', weight: 50, color: 'green' }};

...值:[苹果、橙子、甜瓜]

apple、orange 和 melon 还可以附加其他属性或功能。

我在笔记本中添加了一个原始图表。

于 2018-03-22T16:01:10.187 回答