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 上询问过有人建议使用 Fold
和 Pivot
,但我不确定如何实施。是否可以使用存储为数组的数据?我自己通过 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"}
}
}
我的情况非常简单,我认为我的解决方案太复杂了,很可能我遗漏了什么。假设我有 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 上询问过有人建议使用 Fold
和 Pivot
,但我不确定如何实施。是否可以使用存储为数组的数据?我自己通过 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"}
}
}