我有一个非常简单的情况,我相信我的解决方案太复杂了,很有可能我遗漏了一些东西。假设我有time位置(x,y,z),角度(滚动,俯仰,偏航)和速度的度量。我想要一个简单的可视化,就像我目前拥有的速度图可以用作“画笔”来动态放大前两个图形。
我在 vega-editor 中的情节的一个小例子可以在这里找到。
现在,每个点都是一个对象
{
"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 理解?
如果我有带有“指标列”的时间序列数据,我可以轻松地创建将多个图形组合在一起的图。不幸的是,我没有那个,我找到的唯一解决方案是使用图层。有了这个,我必须明确地为不同的图表设置颜色(而不是使用方案)并且我没有得到图例。
如果图层真的只是在这里选择将 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)