vega-lite 中的数据布局、图层和图例

Data-layout, layers and legends in vega-lite

我的情况非常简单,我认为我的解决方案太复杂了,很可能我遗漏了什么。假设我有 time、位置 (x,y,z)、角度(滚动、俯仰、偏航)和速度的度量。我想要一个简单的可视化,就像我目前拥有的那样,速度图可以用作“画笔”以动态放大前两个图表。

我在 vega 编辑器中的情节的一个小例子 can be found here

1。我可以使用不同的数据布局吗?

现在,每个点都是一个对象

{
    "pitch": -0.006149084584096612,
    "roll": 0.0007914191778949736,
    "speed": 4.747345444390669,
    "time": 0.519741,
    "x": -0.01731604791076788,
    "y": 0.020068310429957575,
    "yaw": 0.0038123065311157552,
    "z": -0.016005977140476142
}

对于许多数据点,仅用于重复列名就需要大量内存。更好的方法是让数据以

的形式出现
{
    "time": [t1, t2, t3, ...],
    "x": [...],
    ...
}

但 vega 的“行优先”表示不允许这样做。我已经在 Slack 上询问过有人建议使用 FoldPivot,但我不确定如何实施。是否可以使用存储为数组的数据?我自己通过 C++ 程序创建数据,并且可以自由地轻松导出不同的表示形式。唯一的问题是如何让 vega-lite 理解?

2。图层和图例。

如果我有带有“指标列”的时间序列数据,我可以轻松地创建组合多个图形的图。不幸的是,我没有那个,我找到的唯一解决方案是使用图层。有了这个,我必须明确地为不同的图表设置颜色(而不是使用方案)并且我没有得到图例。

如果图层真的只能在这里选择组合,例如x,y,z 变成一个“运动”图,我怎样才能得到这个图的图例,告诉我红色 -> x,绿色 -> y,和蓝色 -> z?

你的两个问题的答案都是“是”。

第一个问题的关键是将数据以密集格式传递并使用Flatten Transform扩展它。

第二题的关键是用一个Fold Transform把多个列变成一个指标加一个值

这是单个图表 (open in editor) 的演示:

{
  "data": {
    "values": [
      {
        "time": [1, 2, 3, 4],
        "x": [5, 4, 5, 2],
        "y": [2, 3, 2, 4],
        "z": [1, 2, 1, 0]
      }
    ]
  },
  "transform": [
    {"flatten": ["time", "x", "y", "z"]},
    {"fold": ["x", "y", "z"], "as": ["column", "value"]}
  ],
  "mark": "line",
  "encoding": {
    "x": {"field": "time", "type": "quantitative"},
    "y": {"field": "value", "type": "quantitative"},
    "color": {"field": "column", "type": "nominal"}
  }
}