如何在内联数据中使用原始值?

时间:2018-03-15 22:11:45

标签: vega vega-lite

一般来说,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?

2 个答案:

答案 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}
]