В системе декларативной визуализации Vega и Vega-Lite ключевым механизмом преобразования данных в визуальные переменные выступают scale (масштабы). Именно в их конфигурации определяется, как числовые, категориальные или временные данные отображаются в координаты, размеры, цвета и другие визуальные каналы.
Параметр domain задаёт входной диапазон данных, который масштаб интерпретирует как основу для преобразования. Это фундаментальная точка привязки между «сырыми данными» и визуальным представлением.
domain описывает множество значений, которые поступают на вход шкалы. От его корректной настройки зависит точность визуального отображения.
В Vega/Vega-Lite domain может быть:
Используется, когда диапазон заранее известен и не зависит от данных:
"scale": {
"type": "linear",
"domain": [0, 100],
"range": [0, 500]
}
Такой подход фиксирует интерпретацию значений и исключает автоматическое масштабирование.
Чаще всего domain вычисляется из данных:
"scale": {
"type": "linear",
"domain": {"data": "table", "field": "value"}
}
Здесь система анализирует поле value и определяет
минимальное и максимальное значения.
В Vega-Lite это записывается более компактно:
"scale": {
"domain": {"data": "source", "field": "amount"}
}
В сложных визуализациях domain может объединять несколько источников:
"scale": {
"domain": {
"data": "table1",
"field": "value",
"unionWith": {
"data": "table2",
"field": "value"
}
}
}
Это позволяет синхронизировать шкалы между несколькими наборами данных.
Часто применяется для стабилизации визуализации во времени:
"scale": {
"type": "linear",
"domain": [0, {"signal": "maxValue"}]
}
Здесь верхняя граница управляется динамически через сигнал.
domain определяет минимальное и максимальное значение входных данных. Для логарифмических шкал критично, чтобы domain не содержал нулей или отрицательных значений.
"scale": {
"type": "log",
"domain": [1, 1000]
}
domain задаёт список категорий:
"scale": {
"type": "band",
"domain": ["A", "B", "C"]
}
Если domain не задан, он извлекается из данных в порядке появления.
domain интерпретируется как временной интервал:
"scale": {
"type": "time",
"domain": ["2020-01-01", "2021-01-01"]
}
Автоматический domain строится по минимальной и максимальной дате.
domain выполняет функцию нормализации: переводит данные из исходного пространства в интервал, удобный для визуализации (например, [0,1] или пиксельные координаты).
Внутренне это можно представить как:
normalized = (value - min(domain)) / (max(domain) - min(domain))
Далее normalized масштабируется в range.
Параметр domainColor не является отдельным универсальным стандартом Vega-Lite, но в практике визуализации и расширениях термин используется для обозначения домена цветового канала, то есть диапазона значений, которые маппятся в цветовую шкалу.
В контексте Vega/Vega-Lite корректнее говорить о:
scale.domain для цветовых шкал;scale.scheme для предопределённых палитр;domainMid для дивергентных шкал.Тем не менее логика domainColor фактически сводится к управлению входным диапазоном именно цветового отображения.
Цвет в Vega-Lite задаётся через encoding:
"encoding": {
"color": {
"field": "score",
"type": "quantitative",
"scale": {
"domain": [0, 100],
"range": ["red", "green"]
}
}
}
Здесь domain определяет, как числовые значения распределяются по цветам.
Цветовые шкалы используют domain как основу интерполяции:
В случае дивергентных шкал domain становится трёхчастным:
"scale": {
"type": "linear",
"domain": [-100, 0, 100],
"range": ["blue", "white", "red"]
}
Центральное значение (0) выступает как опорная точка.
Именно здесь возникает концептуальная интерпретация domainColor: центральная точка домена управляет переходом между цветами.
При использовании схем:
"scale": {
"scheme": "viridis",
"domain": [0, 1]
}
domain задаёт не абсолютные значения, а нормализованный интервал, который затем интерполируется через встроенную палитру.
Для категориальных данных:
"scale": {
"type": "ordinal",
"domain": ["low", "medium", "high"],
"range": ["#2c7bb6", "#ffffbf", "#d7191c"]
}
Здесь domainColor можно интерпретировать как сопоставление категорий цветам.
domain напрямую влияет на:
Если значение выходит за domain, поведение зависит от типа шкалы:
Фиксированный domain используется для:
Пример:
"scale": {
"domain": [0, 1000]
}
Без фиксированного domain шкала будет «прыгать» при изменении данных.
При комбинировании нескольких визуализаций важно синхронизировать domain:
Поэтому часто domain выносится в общую конфигурацию.
domain является точкой контроля интерпретации данных:
В цветовых шкалах domain фактически выполняет роль преобразователя данных в спектр, формируя основу того, что условно обозначается как domainColor — диапазон значений, определяющий распределение оттенков в визуализации.