在Vega-lite中转换数据

时间:2020-03-05 14:36:18

标签: vega-lite

我有一个数据集,该数据集的每一行都有多个“值”,例如:

"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},

    ]}

根据我对条形图的理解,每个条形都需要自己的“行”。 是否有一种内置的方式可以在Vega Lite中转置以上数据并创建条形图(红色和绿色堆叠在一起,因此总计1/1上为3,1 / 2上为7,1 / 3上为8,依此类推) )?

非常感谢您的帮助, J

1 个答案:

答案 0 :(得分:0)

是的,这正是Fold Transform设计的目的。例如(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}
  }
}

enter image description here

一些注意事项:

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