Механизм scale определяет преобразование данных из домена значений (domain) в визуальное пространство (range). В контексте Vega и Vega-Lite шкалы являются центральным звеном всей системы рендеринга: именно они связывают данные с пикселями, цветами, размерами, углами и другими визуальными каналами.
Шкала описывается объектом, который включает минимум два ключевых параметра:
Дополнительно используются параметры поведения преобразования, такие как тип шкалы, интерполяция, округление и нормализация.
Пример базовой шкалы в Vega-Lite:
{
"scale": {
"domain": [0, 100],
"range": [0, 500]
}
}
В Vega (низкоуровневом формате) шкалы описываются аналогично, но чаще
через явные определения в блоке scales.
В Vega-Lite основная точка управления масштабами — объект
config.scale. Он задаёт поведение шкал по умолчанию для
всей спецификации.
{
"config": {
"scale": {
"bandPaddingInner": 0.1,
"bandPaddingOuter": 0.2,
"pointPadding": 0.5,
"useUnaggregatedDomain": false,
"zero": true
}
}
}
Иерархия приоритета:
Глобальные настройки используются как базовый слой, если локальные параметры не переопределяют их явно.
Тип шкалы определяет математическое преобразование данных.
Наиболее часто используемая шкала:
Глобальные параметры:
{
"config": {
"scale": {
"zero": true,
"nice": true
}
}
}
Используется для данных с экспоненциальным ростом:
{
"scale": {
"type": "log",
"base": 10
}
}
Глобально:
{
"config": {
"scale": {
"log": {
"base": 10
}
}
}
}
Для временных рядов:
{
"config": {
"scale": {
"time": {
"clamp": true
}
}
}
}
Категориальные данные:
{
"config": {
"scale": {
"bandPaddingInner": 0.15,
"bandPaddingOuter": 0.1
}
}
}
Контролирует способ построения домена при агрегированных данных.
{
"config": {
"scale": {
"useUnaggregatedDomain": true
}
}
}
true — домен строится по исходным даннымfalse — домен строится по агрегатам (min/max после
агрегации)Это критически влияет на визуализации с группировками и статистическими функциями.
Если domain не задан явно, Vega-Lite вычисляет его
автоматически:
Глобальные настройки могут влиять на это через:
useUnaggregatedDomainzeronice{
"config": {
"scale": {
"range": {
"category": "tableau10"
}
}
}
}
Используются встроенные палитры Vega:
Для позиционных шкал:
{
"config": {
"scale": {
"rangeStep": 20
}
}
}
Шкалы band/point поддерживают параметры отступов:
{
"config": {
"scale": {
"bandPaddingInner": 0.2,
"bandPaddingOuter": 0.3,
"pointPadding": 0.5
}
}
}
Регулирует расстояние между элементами внутри шкалы.
Определяет отступы по краям.
Используется для точечных шкал (scatter-like categorical layouts).
{
"config": {
"scale": {
"nice": true
}
}
}
Функция nice:
В Vega это реализовано через расширение domain до «удобных» чисел (например, 97 → 100).
{
"config": {
"scale": {
"clamp": true
}
}
}
Поведение:
Используется для предотвращения выхода визуальных элементов за границы графика.
{
"config": {
"scale": {
"reverse": true
}
}
}
Инвертирует направление отображения:
Для цветовых и непрерывных шкал:
{
"config": {
"scale": {
"interpolate": "rgb"
}
}
}
Варианты:
Выбор интерполяции влияет на:
Глобальные настройки редко используются изолированно; их роль — формирование базовой линии поведения.
Пример взаимодействия:
{
"config": {
"scale": {
"nice": true,
"zero": true,
"bandPaddingInner": 0.1
}
},
"mark": "bar",
"encoding": {
"x": {
"field": "category",
"type": "nominal"
},
"y": {
"field": "value",
"type": "quantitative",
"scale": {
"zero": false
}
}
}
}
Здесь:
zero: truezero для оси YВ multi-view конструкциях Vega-Lite (facet, concat, repeat) шкалы могут:
{
"resolve": {
"scale": {
"x": "shared",
"y": "independent"
}
}
}
Глобальные scale-настройки при этом применяются внутри каждого подграфа, если не переопределены.
{
"config": {
"scale": {
"scheme": "category10"
}
}
}
Используется для унификации визуального стиля:
Полная иерархия:
Эта система позволяет:
В Vega шкалы компилируются в runtime-компоненты:
Изменение глобального config.scale приводит к:
Эта реактивная модель обеспечивает согласованность визуализации при динамических данных.