首页 > 解决方案 > Vega-lite 热图“转换”无法正常工作

问题描述

1)有一个X - 坐标和Y - 坐标。有一个 Z 值。Z需要计算AVG。

"data": {
"values": [
  {"x": 0, "y": 0, "z": 0},
  {"x": 1, "y": 0, "z": 1},
  {"x": 2, "y": 0, "z": 5},
  {"x": 2, "y": 0, "z": 10},
  {"x": 4, "y": 0, "z": 16},
  {"x": 0, "y": 1, "z": 1},
  {"x": 1, "y": 1, "z": 2},
  {"x": 2, "y": 1, "z": 5},
  {"x": 3, "y": 1, "z": 10},
  {"x": 5, "y": 1, "z": 26}
]},

如果数据:

"encoding": {
"x": {"field": "x", "type": "ordinal", "title": "X"},
"y": {"field": "y", "type": "ordinal", "title": "Y"} },

然后 AVG 是对的:

织女星编辑器

在此处输入图像描述

如果我将“transform”与“groupby”一起使用:

"transform": [  {"window": [{"op": "count", "field": "x", "as": "x2"}], "groupby": ["y"]}],
"encoding": {
    "x": {"field": "x2", "type": "ordinal", "title": "X"},
    "y": {"field": "y", "type": "ordinal", "title": "Y"} 
 },

那么 AVG 不是真的: Vega Editor

在此处输入图像描述

标签: elasticsearchkibanaheatmapvegavega-lite

解决方案


转换正在做你告诉它做的事情:

{"window": [{"op": "count", "field": "x", "as": "x2"}], "groupby": ["y"]}

它按 对您的数据进行分组y。示意图如下所示:

y=0: x: [0,  1,  2,  2,  4]
     z: [0,  1,  5, 10, 16]

y=1: x: [0,  1,  2,  3, 5]
     z: [1,  2,  5, 10, 26]

然后它执行一个滑动窗口并将计数分配给x2

y=0: x:  [0,  1,  2,  2,  4]
     z:  [0,  1,  5, 10, 16]
     x2: [1,  2,  3,  4,  5]

y=1: x:  [0,  1,  2,  3,  5]
     z:  [1,  2,  5, 10, 26]
     x2: [1,  2,  3,  4,  5]

如您所见,当您创建yvs的图时x2,现在z每个位置都有一个值,这正确地反映在上面显示的图表中。

如果您想要不同的行为,您应该指定不同的转换。


推荐阅读