Структура объекта encoding

В спецификации Vega-Lite объект encoding определяет соответствие между данными и визуальными каналами графика. Он является центральной частью декларативного описания визуализации и задаёт, каким образом поля данных преобразуются в геометрические примитивы, цвета, размеры, позиции и подписи.

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

Основные принципы:

  • каждый канал отвечает за отдельное визуальное измерение;
  • один и тот же канал может использоваться только один раз в рамках одной визуализации;
  • описание канала может быть как простым (строка или число), так и расширенным объектом;
  • encoding не содержит процедурной логики — только декларативные правила отображения.

Общая структура encoding

Базовая форма объекта encoding:

{
  "encoding": {
    "x": { ... },
    "y": { ... },
    "color": { ... },
    "size": { ... }
  }
}

Каждое свойство внутри encoding называется channel definition (определение канала).

Простейшая форма канала:

"x": {
  "field": "sales",
  "type": "quantitative"
}

Расширенная форма:

"x": {
  "field": "date",
  "type": "temporal",
  "timeUnit": "year",
  "axis": { "title": "Год" },
  "scale": { "type": "linear" }
}

Каналы отображения данных

Позиционные каналы: x и y

Каналы x и y определяют координаты в декартовой системе.

x обычно отвечает за горизонтальную ось, y — за вертикальную.

"x": { "field": "category", "type": "nominal" },
"y": { "field": "value", "type": "quantitative" }

Особенности:

  • для числовых данных используется линейное масштабирование;
  • для категориальных данных применяется дискретная шкала;
  • для временных данных возможна агрегация по timeUnit.

Канал color

Канал color задаёт визуальное кодирование через цвет.

"color": {
  "field": "region",
  "type": "nominal"
}

Функциональные возможности:

  • автоматическое построение легенды;
  • поддержка дискретных и непрерывных шкал;
  • возможность условного окрашивания;
  • использование градиентов для количественных данных.

Пример числового цвета:

"color": {
  "field": "profit",
  "type": "quantitative",
  "scale": { "scheme": "blues" }
}

Канал size

Канал size управляет размером геометрического примитива.

"size": {
  "field": "population",
  "type": "quantitative"
}

Используется в:

  • точечных диаграммах;
  • bubble charts;
  • линейных графиках (толщина линии).

Особенности:

  • нелинейные шкалы (sqrt, log) часто применяются для сглаживания восприятия;
  • поддерживает масштабирование по диапазону значений.

Канал shape

Канал shape используется для задания формы маркеров.

"shape": {
  "field": "type",
  "type": "nominal"
}

Ограничения:

  • применяется только к mark типам, поддерживающим символы (point);
  • значения обычно дискретные;
  • масштабирование не числовое.

Каналы facet: row и column

Каналы row и column используются для разбиения визуализации на подграфики.

"row": { "field": "country", "type": "nominal" },
"column": { "field": "year", "type": "temporal" }

Особенности:

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

Канал tooltip

Канал tooltip задаёт содержимое всплывающих подсказок.

"tooltip": [
  { "field": "name", "type": "nominal" },
  { "field": "value", "type": "quantitative" }
]

Особенности:

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

Канал text

Канал text определяет текстовые подписи.

"text": {
  "field": "label",
  "type": "nominal"
}

Используется в:

  • bar labels;
  • annotations;
  • value labels на точках.

Структура определения канала

Каждый канал в encoding описывается объектом ChannelDef.

Основные поля:

field

Имя поля из набора данных.

"field": "revenue"

Особенности:

  • может ссылаться на вложенные структуры через точечную нотацию;
  • поддерживает вычисляемые поля через transform (но не внутри encoding напрямую).

type

Определяет тип шкалы данных:

  • quantitative — числовые значения;
  • nominal — категориальные данные;
  • ordinal — упорядоченные категории;
  • temporal — временные данные.
"type": "quantitative"

Тип влияет на:

  • выбор шкалы;
  • поведение осей;
  • сортировку;
  • агрегирование.

aggregate

Позволяет выполнять агрегацию данных.

"aggregate": "sum"

Распространённые значения:

  • sum
  • mean
  • median
  • count
  • min
  • max

Пример:

"y": {
  "field": "sales",
  "aggregate": "sum",
  "type": "quantitative"
}

bin

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

"bin": true

Расширенный вариант:

"bin": {
  "maxbins": 20
}

Особенности:

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

timeUnit

Применяется к временным данным для извлечения компонентов даты.

"timeUnit": "yearmonth"

Примеры:

  • year
  • month
  • date
  • hours
  • yearmonthdate

scale

Объект scale определяет преобразование данных в визуальные координаты.

"scale": {
  "type": "linear"
}

Основные параметры:

  • type (linear, log, sqrt, ordinal)
  • domain (диапазон входных значений)
  • range (диапазон отображения)
  • scheme (цветовые схемы)

Пример цветовой шкалы:

"scale": {
  "scheme": "category10"
}

axis

Настройка осей координат.

"axis": {
  "title": "Продажи",
  "grid": true
}

Возможности:

  • заголовки;
  • форматирование подписей;
  • управление сеткой;
  • поворот меток.

legend

Управление легендой.

"legend": {
  "title": "Регион"
}

Параметры:

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

sort

Определяет сортировку данных внутри канала.

"sort": "ascending"

Расширенный вариант:

"sort": {
  "field": "value",
  "order": "descending"
}

value

Фиксированное значение вместо привязки к данным.

"color": {
  "value": "red"
}

Особенности:

  • полностью отключает data-driven поведение;
  • используется для статических визуальных элементов.

condition

Позволяет задавать условное кодирование.

"color": {
  "condition": {
    "test": "datum.value > 100",
    "value": "red"
  },
  "value": "blue"
}

Механизм:

  • проверяется логическое выражение;
  • при истинности применяется одно значение;
  • при ложности — другое.

Вложенность и приоритеты свойств

Порядок интерпретации каналов подчиняется строгой иерархии:

  1. value (фиксированное значение)
  2. condition
  3. field + transform (aggregate/bin/timeUnit)
  4. scale преобразование
  5. axis/legend (визуальное оформление)

Это разделение обеспечивает предсказуемость визуального результата независимо от сложности encoding.


Множественные определения одного канала

Некоторые каналы допускают массив значений или условные конструкции.

Пример tooltip с несколькими полями:

"tooltip": [
  { "field": "name", "type": "nominal" },
  { "field": "value", "type": "quantitative" },
  { "field": "date", "type": "temporal" }
]

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


Взаимодействие encoding с mark

encoding всегда интерпретируется совместно с определением mark:

  • bar → x + y + color
  • line → x (time) + y (value)
  • point → x + y + size + shape
  • area → x + y + y2

Связь между mark и encoding определяет семантику визуализации, но не изменяет структуру самого encoding объекта.


Композиция каналов и масштабирование представления

encoding поддерживает комбинирование каналов для многомерного отображения данных:

  • position (x, y) задаёт геометрию;
  • color добавляет категориальное разделение;
  • size вводит количественное измерение;
  • facet разделяет пространство визуализации.

Такая композиция формирует многослойное представление данных без необходимости императивного управления отрисовкой.