В Vega-Lite поле scale в кодировании каналов определяет
преобразование данных из доменного пространства (значений
данных) в пространство визуального представления (пиксели,
цвета, размеры). Каждое визуальное измерение — координаты, цвет, размер,
прозрачность — почти всегда проходит через масштабирование.
Формально шкала описывает отображение:
domain (данные) → range (визуальные значения)
В декларативной модели Vega-Lite шкала является частью канала
кодирования (encoding) и задаёт локальные или
модифицированные параметры преобразования.
Шкала задаётся внутри конкретного канала:
{
"mark": "point",
"encoding": {
"x": {
"field": "price",
"type": "quantitative",
"scale": {
"type": "linear",
"zero": false
}
}
}
}
Если scale не задан явно, Vega-Lite автоматически
выбирает тип шкалы на основе type поля данных
(quantitative, temporal,
ordinal).
Используется для непрерывных количественных данных.
"scale": {
"type": "linear"
}
Характеристика: равномерное отображение изменений значений.
Подходит для экспоненциально растущих данных.
"scale": {
"type": "log"
}
Особенность: требует положительных значений.
"scale": {
"type": "pow",
"exponent": 0.5
}
Используется для нелинейных преобразований чувствительности.
Для дискретных значений:
ordinalbandpoint"scale": {
"type": "band",
"padding": 0.2
}
band распределяет категории по отрезкам,
point — по точкам.
"scale": {
"type": "time"
}
Поддерживает календарную семантику и неравномерные интервалы.
Определяет, какие значения данных участвуют в масштабировании.
Автоматический режим:
"domain": true
Явное задание:
"domain": [0, 100]
Или привязка к данным:
"domain": {
"data": "table",
"field": "value"
}
Определяет визуальный диапазон:
"range": [0, 400]
Для цветов:
"range": ["#f00", "#00f"]
"scale": {
"type": "linear",
"nice": true
}
Автоматически расширяет domain до «красивых» значений (например, 97 → 100).
"scale": {
"zero": true
}
Особенно важно для столбчатых диаграмм: обеспечивает корректную визуальную интерпретацию величин.
"scale": {
"clamp": true
}
Все значения вне domain «прижимаются» к границам шкалы.
"scale": {
"reverse": true
}
Меняет направление отображения (например, высокий → низкий).
Наиболее частое использование:
"encoding": {
"x": {
"field": "sales",
"type": "quantitative",
"scale": { "type": "linear" }
},
"y": {
"field": "month",
"type": "ordinal",
"scale": { "type": "band" }
}
}
Цветовые шкалы являются отдельным классом преобразований:
"color": {
"field": "temperature",
"type": "quantitative",
"scale": {
"scheme": "redyellowblue"
}
}
scheme)Vega-Lite поддерживает предустановленные градиенты:
bluesredsviridismagmacategory10Пример:
"scale": {
"scheme": "viridis"
}
Для дискретных данных:
"scale": {
"scheme": "category10"
}
Используется для равномерного распределения категорий с шириной:
"scale": {
"type": "band",
"padding": 0.1
}
Характеристика: каждая категория занимает интервал.
Категории отображаются как точки без ширины:
"scale": {
"type": "point"
}
Используется в scatter-like представлениях категорий.
Иногда требуется передать значение напрямую без преобразования:
"encoding": {
"x": {
"field": "x",
"scale": null
}
}
Это приводит к использованию «сырых» значений.
Если scale не задан, Vega-Lite автоматически:
type данныхПример поведения:
В сложных спецификациях возможны именованные шкалы (в Vega), но в Vega-Lite чаще используется локальная декларация на уровне канала, что упрощает композицию и снижает необходимость ручного управления зависимостями между шкалами.
Шкала может строиться по агрегированным данным:
"x": {
"aggregate": "sum",
"field": "value",
"type": "quantitative",
"scale": {
"type": "linear"
}
}
В этом случае domain вычисляется уже после агрегации.
При использовании bin: true шкала автоматически
адаптируется к интервальным значениям:
"x": {
"bin": true,
"field": "age",
"type": "quantitative",
"scale": {
"type": "linear"
}
}
Domain становится набором интервалов, а не точечных значений.
Шкала определяет:
Неправильный выбор типа шкалы приводит к искажению восприятия данных, особенно при переходе между linear и log.
Шкала одновременно управляет:
axis)legend)Любое изменение scale автоматически отражается во всех связанных визуальных элементах, так как они используют единое преобразование domain → range.
{
"mark": "bar",
"encoding": {
"x": {
"field": "category",
"type": "ordinal",
"scale": {
"type": "band",
"padding": 0.15
}
},
"y": {
"field": "value",
"type": "quantitative",
"scale": {
"type": "linear",
"zero": true,
"nice": true
}
},
"color": {
"field": "group",
"type": "nominal",
"scale": {
"scheme": "category10"
}
}
}
}