Поле domain и domainColor

В системе декларативной визуализации Vega и Vega-Lite ключевым механизмом преобразования данных в визуальные переменные выступают scale (масштабы). Именно в их конфигурации определяется, как числовые, категориальные или временные данные отображаются в координаты, размеры, цвета и другие визуальные каналы.

Параметр domain задаёт входной диапазон данных, который масштаб интерпретирует как основу для преобразования. Это фундаментальная точка привязки между «сырыми данными» и визуальным представлением.


Семантика domain

domain описывает множество значений, которые поступают на вход шкалы. От его корректной настройки зависит точность визуального отображения.

В Vega/Vega-Lite domain может быть:

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

Явно заданный domain

Используется, когда диапазон заранее известен и не зависит от данных:

"scale": {
  "type": "linear",
  "domain": [0, 100],
  "range": [0, 500]
}

Такой подход фиксирует интерпретацию значений и исключает автоматическое масштабирование.


Автоматический domain

Чаще всего domain вычисляется из данных:

"scale": {
  "type": "linear",
  "domain": {"data": "table", "field": "value"}
}

Здесь система анализирует поле value и определяет минимальное и максимальное значения.

В Vega-Lite это записывается более компактно:

"scale": {
  "domain": {"data": "source", "field": "amount"}
}

Расширение domain через union

В сложных визуализациях domain может объединять несколько источников:

"scale": {
  "domain": {
    "data": "table1",
    "field": "value",
    "unionWith": {
      "data": "table2",
      "field": "value"
    }
  }
}

Это позволяет синхронизировать шкалы между несколькими наборами данных.


domain с фиксированными экстремумами

Часто применяется для стабилизации визуализации во времени:

"scale": {
  "type": "linear",
  "domain": [0, {"signal": "maxValue"}]
}

Здесь верхняя граница управляется динамически через сигнал.


Поведение domain в различных типах шкал

Числовые шкалы (linear, log, pow)

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

"scale": {
  "type": "log",
  "domain": [1, 1000]
}

Категориальные шкалы (band, point)

domain задаёт список категорий:

"scale": {
  "type": "band",
  "domain": ["A", "B", "C"]
}

Если domain не задан, он извлекается из данных в порядке появления.


Временные шкалы (time, utc)

domain интерпретируется как временной интервал:

"scale": {
  "type": "time",
  "domain": ["2020-01-01", "2021-01-01"]
}

Автоматический domain строится по минимальной и максимальной дате.


domain и нормализация данных

domain выполняет функцию нормализации: переводит данные из исходного пространства в интервал, удобный для визуализации (например, [0,1] или пиксельные координаты).

Внутренне это можно представить как:

normalized = (value - min(domain)) / (max(domain) - min(domain))

Далее normalized масштабируется в range.


domainColor: смысл и применение в цветовых шкалах

Параметр domainColor не является отдельным универсальным стандартом Vega-Lite, но в практике визуализации и расширениях термин используется для обозначения домена цветового канала, то есть диапазона значений, которые маппятся в цветовую шкалу.

В контексте Vega/Vega-Lite корректнее говорить о:

  • scale.domain для цветовых шкал;
  • scale.scheme для предопределённых палитр;
  • domainMid для дивергентных шкал.

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


Цветовые шкалы и domain

Цвет в Vega-Lite задаётся через encoding:

"encoding": {
  "color": {
    "field": "score",
    "type": "quantitative",
    "scale": {
      "domain": [0, 100],
      "range": ["red", "green"]
    }
  }
}

Здесь domain определяет, как числовые значения распределяются по цветам.


Нормализация цвета через domain

Цветовые шкалы используют domain как основу интерполяции:

  • нижняя граница → один цвет;
  • верхняя граница → другой цвет;
  • промежуточные значения → градиент.

Дивергентные цветовые шкалы и domainColor как концепт

В случае дивергентных шкал domain становится трёхчастным:

"scale": {
  "type": "linear",
  "domain": [-100, 0, 100],
  "range": ["blue", "white", "red"]
}

Центральное значение (0) выступает как опорная точка.

Именно здесь возникает концептуальная интерпретация domainColor: центральная точка домена управляет переходом между цветами.


domain в нормализованных цветовых схемах

При использовании схем:

"scale": {
  "scheme": "viridis",
  "domain": [0, 1]
}

domain задаёт не абсолютные значения, а нормализованный интервал, который затем интерполируется через встроенную палитру.


Дискретные цветовые домены

Для категориальных данных:

"scale": {
  "type": "ordinal",
  "domain": ["low", "medium", "high"],
  "range": ["#2c7bb6", "#ffffbf", "#d7191c"]
}

Здесь domainColor можно интерпретировать как сопоставление категорий цветам.


Связь domain с легендами

domain напрямую влияет на:

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

Если значение выходит за domain, поведение зависит от типа шкалы:

  • числовые — обрезка или экстраполяция;
  • категориальные — игнорирование или fallback;
  • цветовые — насыщение крайним цветом.

Стабилизация визуализаций через фиксированный domain

Фиксированный domain используется для:

  • сравнения графиков;
  • временных рядов;
  • дашбордов;
  • анимаций.

Пример:

"scale": {
  "domain": [0, 1000]
}

Без фиксированного domain шкала будет «прыгать» при изменении данных.


domain в сложных композициях

При комбинировании нескольких визуализаций важно синхронизировать domain:

  • одинаковые шкалы → сопоставимые значения;
  • разные domain → искажение восприятия.

Поэтому часто domain выносится в общую конфигурацию.


Итоговая роль domain в системе визуализации

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

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

В цветовых шкалах domain фактически выполняет роль преобразователя данных в спектр, формируя основу того, что условно обозначается как domainColor — диапазон значений, определяющий распределение оттенков в визуализации.