Поле encodings и fields в selection

В Vega-Lite интерактивность строится вокруг концепции selection — декларативного описания пользовательского выбора, который может влиять на визуализацию: фильтровать данные, изменять параметры графика, подсвечивать элементы и связывать несколько представлений. Внутри определения selection ключевую роль играют два механизма привязки к данным: encodings и fields. Эти два подхода определяют, каким образом пользовательское взаимодействие связано с данными в датасете.


Базовая структура selection

Selection в Vega-Lite описывается в разделе selection (в современных версиях — params с типом selection). Общая идея заключается в том, что пользовательское действие (например, клик или выделение области) преобразуется в набор условий, которые затем применяются к данным.

Упрощённая структура:

{
  "params": {
    "brush": {
      "select": "interval"
    }
  }
}

Однако сам по себе selection ничего не делает без привязки к данным. Именно здесь вступают в работу encodings и fields.


Encodings в selection

Суть механизма

Encodings связывают selection с визуальными каналами (encoding channels), такими как:

  • x
  • y
  • color
  • size
  • opacity

То есть выбор интерпретируется через визуальные координаты или другие визуальные признаки.

Interval selection и encodings

Наиболее типичный пример использования encodings — interval selection, когда пользователь выделяет прямоугольную область.

{
  "params": {
    "brush": {
      "select": {
        "type": "interval",
        "encodings": ["x", "y"]
      }
    }
  }
}

Здесь selection формируется на основе диапазонов по осям x и y.

Поведение encodings

Encodings определяют:

  • какие оси участвуют в выделении
  • как интерпретировать границы selection
  • какие данные считаются попавшими внутрь selection

Если указано только одно encoding, например:

"encodings": ["x"]

то selection становится одномерным (горизонтальный brush).


Поле fields в selection

Суть механизма

В отличие от encodings, fields работают не с визуальными каналами, а напрямую с именами полей данных.

{
  "params": {
    "pick": {
      "select": {
        "type": "point",
        "fields": ["category"]
      }
    }
  }
}

Здесь selection основан не на координатах, а на значениях конкретного столбца данных.

Когда используются fields

fields применяются в случаях:

  • точечного выбора категорий
  • фильтрации по дискретным значениям
  • связывания selection с конкретными колонками таблицы

Ключевое различие encodings и fields

Различие между подходами принципиальное:

Encodings

  • работают через визуальные каналы
  • зависят от масштаба и координат
  • применимы к continuous data
  • используются в interval selection

Fields

  • работают напрямую с данными
  • не зависят от геометрии отображения
  • применимы к categorical / discrete data
  • используются в point selection

Interval selection: зависимость от encodings

Interval selection всегда опирается на геометрию. Пример:

{
  "params": {
    "brush": {
      "select": {
        "type": "interval",
        "encodings": ["x"]
      }
    }
  }
}

Логика работы

  1. пользователь выделяет область на графике
  2. Vega вычисляет диапазон по оси x
  3. selection хранит { x: [min, max] }
  4. данные фильтруются по этому диапазону

Point selection: роль fields

Point selection ориентирован на выбор конкретных значений.

{
  "params": {
    "highlight": {
      "select": {
        "type": "point",
        "fields": ["country"]
      }
    }
  }
}

Логика работы

  1. пользователь кликает на элемент
  2. извлекается значение поля country
  3. selection становится множеством выбранных значений
  4. все элементы с совпадающим значением подсвечиваются

Комбинированное использование encodings и fields

В сложных визуализациях возможно одновременное использование разных selection:

{
  "params": {
    "brush": {
      "select": {
        "type": "interval",
        "encodings": ["x", "y"]
      }
    },
    "click": {
      "select": {
        "type": "point",
        "fields": ["category"]
      }
    }
  }
}

Эффект комбинации

  • brush управляет геометрическим фильтром
  • click управляет категориальной фильтрацией
  • оба selection могут применяться одновременно

Влияние encodings и fields на трансформации данных

Selection в Vega-Lite может использоваться в transform-блоке:

"transform": [
  {
    "filter": { "param": "brush" }
  }
]

Если selection основан на encodings

Фильтр будет выглядеть как диапазон:

"x >= 10 && x <= 50"

Если selection основан на fields

Фильтр будет категориальным:

"category == 'A'"

Множественные поля в fields

fields могут содержать несколько колонок:

{
  "fields": ["country", "year"]
}

Поведение

  • selection становится составным ключом
  • совпадение происходит по кортежу значений
  • используется для сложной идентификации объектов

Производительность и ограничения

Encodings

  • требуют вычисления координат
  • зависят от масштаба (scale)
  • могут быть дорогими при больших dataset

Fields

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

Взаимодействие с scale и projection

Encodings тесно связаны с:

  • scale transformations
  • coordinate systems
  • projections (например, geo charts)

fields же остаются на уровне данных и не зависят от визуального представления.


Типичные ошибки при использовании

Ошибка 1: использование fields для interval

"select": {
  "type": "interval",
  "fields": ["x"]
}

Такое определение некорректно: interval selection не работает через fields.


Ошибка 2: использование encodings для категорий

"select": {
  "type": "point",
  "encodings": ["color"]
}

Это возможно, но приводит к неожиданному поведению, если color — не числовой канал.


Ошибка 3: смешивание логик без понимания приоритета

Если одновременно заданы fields и encodings, Vega-Lite выбирает стратегию в зависимости от типа selection, что может приводить к неочевидным результатам.


Архитектурная роль encodings и fields

Внутри Vega-Lite selection строится как промежуточный слой между:

  • пользовательским вводом
  • системой координат
  • моделью данных

Encodings выступают как мост между визуальным пространством и логикой выбора.

Fields выступают как прямой доступ к данным без визуальной интерпретации.


Связь с reactive grammar Vega

В низкоуровневой Vega:

  • encodings соответствуют сигналам координат
  • fields соответствуют data lookup и predicate expressions

Vega-Lite компилирует декларативные selection в эту низкоуровневую модель автоматически.


Практическое значение выбора подхода

Выбор между encodings и fields определяет:

  • тип пользовательского взаимодействия
  • производительность визуализации
  • масштабируемость dataset
  • характер аналитики (геометрическая или категориальная)

Encodings формируют визуально-интуитивные взаимодействия, где важна форма и расстояние.

Fields формируют семантические взаимодействия, где важны значения и идентичность объектов.