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

hal*_*tan 3 vega-lite

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

在此处输入图片说明

我在 vega-editor 中的情节的一个小例子可以在这里找到

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
}
Run Code Online (Sandbox Code Playgroud)

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

{
    "time": [t1, t2, t3, ...],
    "x": [...],
    ...
}
Run Code Online (Sandbox Code Playgroud)

但是 vega 的“行第一”表示不允许这样做。我已经在 Slack 上问过有人建议在哪里使用Foldand Pivot,但我不确定如何实现这一点。是否可以使用存储为数组的数据?我自己从 C++ 程序创建数据,我可以轻松地导出不同的表示。唯一的问题是我如何让 vega-lite 理解?

2. 图层和图例。

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

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

jak*_*vdp 10

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

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

第二个问题的关键是使用折叠变换将多列变成一个指标加一个值。

这是单个图表的演示(在编辑器中打开):

{
  "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"}
  }
}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

  • 这个答案很到位。我可以轻松地调整我的代码并使其工作。谢谢。 (2认同)