Тепловая карта Vega-lite "transform" работает неправильно - PullRequest
0 голосов
/ 14 января 2020

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 все верно:

Vega Editor

enter image description here

Если я использую "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

enter image description here

1 Ответ

0 голосов
/ 14 января 2020

Преобразование делает именно то, что вы говорите:

{"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]

Как вы можете видеть, когда вы создаете график y против x2, теперь в каждом месте есть одно значение z, и это правильно отражено на приведенной выше диаграмме.

Если вы хотите другое поведение, вам следует указать другое преобразование.

...