在 Vega-lite 中转换数据

Transforming data in Vega-lite

我有一个数据集,每行有多个 "values",例如:

"data": {
    "values": [
      {"date": "2020-01-01", "red":1, "green": 2},
      {"date": "2020-01-02", "red":3, "green": 4},
      {"date": "2020-01-03", "red":5, "green": 3},

    ]}

根据我对条形图的理解,每个条形图都需要自己的 "row"。 有没有一种内置的方法可以在 Vega Lite 中转置上述数据并创建一个条形图(红色和绿色堆叠在一起,这样它在 1/1 上总共有 3 个,在 1/2 上有 7 个,在 1/3 上有 8 个等等)?

非常感谢您的帮助, J

是的,这正是 Fold Transform is designed for. For example (vega editor):

{
  "data": {
    "values": [
      {"date": "2020-01-01T00:00:00", "red": 1, "green": 2},
      {"date": "2020-01-02T00:00:00", "red": 3, "green": 4},
      {"date": "2020-01-03T00:00:00", "red": 5, "green": 3}
    ]
  },
  "transform": [{"fold": ["red", "green"], "as": ["color", "value"]}],
  "mark": "bar",
  "encoding": {
    "x": {"field": "date", "type": "ordinal", "timeUnit": "yearmonthdate"},
    "y": {"type": "quantitative", "field": "value"},
    "color": {"field": "color", "type": "nominal", "scale": null}
  }
}

一些注意事项:

  • 我将您的日期更改为 ISO 格式,因为这在 Vega-Lite 中效果最好。 Javascript 日期解析行为因浏览器而异,但所有浏览器都一致地解析 ISO。
  • 设置 "scale": null 会导致从数据中提取颜色,而不是生成从数据值到色标的映射。