В спецификациях Vega и Vega-Lite поле range определяет
область выходных значений шкалы (scale) — то, во что преобразуются
данные после применения домена (domain). В отличие от
domain, который работает с данными, range
задаёт визуальное пространство: пиксели, цвета, символы, шаги сетки и
другие эстетические параметры.
Официальная документация: Vega documentation Официальная документация Vega-Lite: Vega-Lite documentation
Шкала в Vega/Vega-Lite задаётся как функция отображения:
data value (domain) → visual value (range)
range может принимать разные формы:
width, height)Ключевая особенность: range часто не является
фиксированным набором, а вычисляется контекстно.
Наиболее часто используемые именованные диапазоны:
"width" — ширина визуализации"height" — высота визуализацииПример Vega-Lite:
{
"mark": "circle",
"encoding": {
"x": {
"field": "value",
"type": "quantitative",
"scale": {
"range": "width"
}
}
}
}
Здесь range: "width" означает:
минимум шкалы → x = 0
максимум шкалы → x = width
Аналогично:
"range": "height"
используется для вертикальных шкал.
Именованные диапазоны:
Это критично в responsive-графиках.
В Vega существует набор предопределённых диапазонов для категорий и цветов.
Пример:
{
"scale": {
"type": "ordinal",
"range": "category"
}
}
"category" — это встроенный набор дискретных цветов.
Аналоги:
"category10""category20""tableau10"Они используются для:
Часто range задаётся через схемы:
{
"scale": {
"type": "linear",
"range": {
"scheme": "blues"
}
}
}
Схемы поддерживают:
blues, greens)redblue)tableau10)Здесь range уже не массив, а объект с семантикой
генерации.
{
"scale": {
"range": [0, 400]
}
}
Это полностью эквивалентно ручному заданию пиксельного пространства.
Step используется для дискретных шкал:
{
"scale": {
"range": {
"step": 20
}
}
}
Такой подход применяется в:
Фактически:
position = index * step
В Vega диапазоны могут ссылаться на именованные ресурсы через
signals и scales.
Пример:
"scales": [
{
"name": "xscale",
"type": "linear",
"domain": {"data": "table", "field": "x"},
"range": "width"
}
]
Здесь "width" — сигнал окружения, который автоматически
вычисляется runtime.
В Vega-Lite поле range намеренно упрощено по сравнению с
Vega:
Поддерживаются:
"width""height""symbol""category""ordinal"{scheme: ...}[number, number]Не поддерживаются:
Vega-Lite компилирует range в Vega-уровень.
Пример:
"scale": {
"range": "width"
}
компилируется в Vega как:
"range": {"signal": "width"}
Таким образом:
"range": "width"
Используется для оси X.
"range": "height"
Используется для Y-оси (обычно инвертированной).
"range": "category10"
Применяется для цветового кодирования групп.
"range": {
"scheme": "viridis"
}
Используется для heatmap и density plots.
"range": {
"step": 15
}
Используется для band scales.
range"range": ["width", "height"]
Такой вариант некорректен: именованные диапазоны не комбинируются массивом.
"scale": {
"type": "ordinal",
"range": {
"scheme": "blues"
}
}
Для ordinal шкал это допустимо, но для quantitative без интерполяции может давать неожиданный результат.
"range": [0, 500]
В responsive-визуализациях это ломает адаптивность, так как контейнер может быть меньше или больше.
domain → continuous numeric range
range интерполируется линейно.
domain → discrete set → range items
Каждому элементу домена соответствует отдельный элемент range.
domain → segments of continuous range
Используется step, padding и alignment.
domain → points in range
Каждому значению соответствует центр позиции.
range часто работает совместно с:
paddingpaddingInnerpaddingOuterПример:
{
"scale": {
"type": "band",
"range": "width",
"padding": 0.2
}
}
Здесь range задаёт базовое пространство, а padding
изменяет распределение внутри него.
Формально:
range = f(environment, scaleType, encoding, scheme)
где:
Поле range в Vega/Vega-Lite является одним из ключевых
механизмов связывания данных с визуальным пространством, и именно
именованные диапазоны позволяют создавать адаптивные, переносимые и
декларативно управляемые визуализации без жёсткой привязки к пиксельной
сетке.