Ось биннинга агрегирования тепловой карты по максимуму в vega-lite

Я пытаюсь выполнить операцию группирования по одной из осей тепловой карты и пытаюсь сохранить максимальное значение для установки цвета в этой ячейке.

Рассмотрим следующий пример

{
  "data": {"name": "my_data"},
  "mark": "rect",
  "encoding": {
    "color": {
      "type": "quantitative",
      "field": "z"
    },
    "tooltip": [{"type": "quantitative", "field": "z"},
    {"type": "ordinal", "field": "y"},
    {"type": "ordinal", "field": "x"}],
    "x": {
      "type": "ordinal",
      "field": "x"
    },
    "y": {
      "type": "ordinal",
      "field": "y"
    }
  },
  "$schema": "https://vega.github.io/schema/vega-lite/v4.8.1.json",
  "datasets": {
    "my_data": [
      {"x": 0, "y": 0, "z": 0},
      {"x": 0, "y": 1, "z": 0},
      {"x": 1, "y": 0, "z": 0},
      {"x": 1, "y": 1, "z": 1},
      {"x": 2, "y": 0, "z": 0},
      {"x": 2, "y": 1, "z": 0},
      {"x": 3, "y": 0, "z": 0},
      {"x": 3, "y": 1, "z": 0},
      {"x": 4, "y": 0, "z": 0},
      {"x": 4, "y": 1, "z": 0},
      {"x": 5, "y": 0, "z": 0},
      {"x": 5, "y": 1, "z": 0},
      {"x": 6, "y": 0, "z": 0},
      {"x": 6, "y": 1, "z": 0}]
  }
}

что показывает что-то вроде:

оригинал

Теперь я пытаюсь агрегировать ось x, добавляя {"color": {"aggregate": "max"}} и {"x": {"bin": {"step": 2}}, и получаю следующее:

binned-2

Теперь для других значений биннинга (например, шаг: 3) горячая точка исчезает:

binned-3

Что я ошибаюсь?

РЕДАКТИРОВАТЬ: Кроме того, установка агрегатора на mean по-прежнему оставляет мне те же значения (вместо, по крайней мере, отображения 0,5 в первом случае), а count всегда возвращает 1.

EDIT2: хотя решение @ jakevdp работало для приведенного выше примера, я все еще вижу ту же проблему, когда значение 1-hot установлено на границах корзины, например, с помощью:

"my_data": [
      {"x": 0, "y": 0, "z": 1},
      {"x": 0, "y": 1, "z": 0},
      {"x": 1, "y": 0, "z": 0},
      {"x": 1, "y": 1, "z": 0},
      {"x": 2, "y": 0, "z": 0},
      {"x": 2, "y": 1, "z": 0},
      {"x": 3, "y": 0, "z": 0},
      {"x": 3, "y": 1, "z": 0},
      {"x": 4, "y": 0, "z": 0},
      {"x": 4, "y": 1, "z": 0},
      {"x": 5, "y": 0, "z": 0},
      {"x": 5, "y": 1, "z": 0},
      {"x": 6, "y": 0, "z": 0},
      {"x": 6, "y": 1, "z": 0}
]

person GermanK    schedule 19.11.2020    source источник


Ответы (1)


Проблема в том, что вы объявили поля x и y во всплывающей подсказке, поэтому все интервалы сгруппированы по этим значениям. В результате в каждой ячейке у вас есть несколько квадратов, нанесенных друг на друга, по одному для каждого значения x без объединения.

Решение состоит в том, чтобы не указывать во всплывающей подсказке поля без привязки:

{
  "data": {"name": "my_data"},
  "mark": "rect",
  "encoding": {
    "color": {"type": "quantitative", "field": "z", "aggregate": "max"},
    "tooltip": [{"type": "quantitative", "field": "z"}],
    "x": {"type": "ordinal", "field": "x", "bin": {"step": 3}},
    "y": {"type": "ordinal", "field": "y"}
  },
  "datasets": {
    "my_data": [
      {"x": 0, "y": 0, "z": 0},
      {"x": 0, "y": 1, "z": 0},
      {"x": 1, "y": 0, "z": 0},
      {"x": 1, "y": 1, "z": 1},
      {"x": 2, "y": 0, "z": 0},
      {"x": 2, "y": 1, "z": 0},
      {"x": 3, "y": 0, "z": 0},
      {"x": 3, "y": 1, "z": 0},
      {"x": 4, "y": 0, "z": 0},
      {"x": 4, "y": 1, "z": 0},
      {"x": 5, "y": 0, "z": 0},
      {"x": 5, "y": 1, "z": 0},
      {"x": 6, "y": 0, "z": 0},
      {"x": 6, "y": 1, "z": 0}
    ]
  }
}

введите описание изображения здесь

person jakevdp    schedule 19.11.2020
comment
Спасибо! По-прежнему существует проблема, когда x = 1 для x на границах корзины (скажем, x = 0 или x = 3, когда шаг равен 3, или x = 0/2/4, когда шаг равен 2). Есть идеи, почему? (NB: это минимальный пример более крупного сюжета, в котором я сталкиваюсь с проблемой исчезновения значений, и простое удаление всплывающей подсказки не помогло мне.) - person GermanK; 20.11.2020
comment
Хорошо, я нашел это. Виновником действительно была всплывающая подсказка, и, похоже, мне также нужно добавить к ней aggregate: max. Не могли бы вы обновить свой ответ этой информацией? Затем я отмечу его как принятый. Спасибо, что указали мне правильное направление! - person GermanK; 20.11.2020
comment
Подробнее о всплывающих подсказках над агрегированными полями можно узнать здесь: github.com/vega/vega-lite/issues / 5992. - person GermanK; 20.11.2020
comment
Ага, я не могу отредактировать свой первый комментарий, но там, где говорится о проблеме, когда x = 1 для x ..., должно быть сказано о проблеме, когда z = 1 для x ... - person GermanK; 20.11.2020