Шкала (scale) в Vega-Lite определяет способ преобразования исходных данных в визуальные значения. Именно шкалы отвечают за то, как числовые значения превращаются в координаты, размеры, цвета, прозрачность, толщину линий и другие визуальные параметры.
Внутри декларативной модели Vega-Lite шкала располагается между данными и визуальным представлением:
Данные → Шкала → Канал кодирования → Визуальный элемент
Например:
150 может быть преобразовано в координату
x = 430;"A" может быть преобразована в цвет
#1f77b4;0.8 может стать прозрачностью
opacity = 0.8.Без шкалы Vega-Lite не знает, каким образом интерпретировать данные внутри графика.
В большинстве случаев Vega-Lite создаёт шкалы автоматически на основе:
Простейший пример:
{
"data": {
"values": [
{"x": 10, "y": 20},
{"x": 30, "y": 40},
{"x": 50, "y": 60}
]
},
"mark": "point",
"encoding": {
"x": {"field": "x", "type": "quantitative"},
"y": {"field": "y", "type": "quantitative"}
}
}
Здесь Vega-Lite автоматически:
x;y;Шкалы применяются к следующим каналам:
| Канал | Назначение |
|---|---|
x |
горизонтальная координата |
y |
вертикальная координата |
color |
цвет |
size |
размер |
opacity |
прозрачность |
shape |
форма |
strokeWidth |
толщина линии |
angle |
угол |
fill |
заливка |
Каждый канал может содержать собственную настройку
scale.
Пример:
{
"encoding": {
"x": {
"field": "price",
"type": "quantitative",
"scale": {
"domain": [0, 1000]
}
}
}
}
Шкала состоит из двух основных частей:
| Компонент | Назначение |
|---|---|
domain |
входной диапазон данных |
range |
выходной визуальный диапазон |
domain определяет множество значений из данных.
Например:
"scale": {
"domain": [0, 100]
}
Это означает:
Минимальное значение = 0
Максимальное значение = 100
По умолчанию Vega-Lite вычисляет domain автоматически.
{
"x": {
"field": "value",
"type": "quantitative"
}
}
Если данные содержат значения:
12, 35, 78, 91
то domain станет:
[12, 91]
Фиксированный domain используется для:
Пример:
{
"encoding": {
"y": {
"field": "temperature",
"type": "quantitative",
"scale": {
"domain": [-50, 50]
}
}
}
}
Категориальные шкалы используют массив категорий.
{
"scale": {
"domain": ["A", "B", "C", "D"]
}
}
Это позволяет:
range определяет, как значения отображаются
визуально.
Например:
"scale": {
"range": [0, 500]
}
означает:
Минимальное значение → 0 px
Максимальное значение → 500 px
В цветовых шкалах range обычно задаёт палитру.
{
"encoding": {
"color": {
"field": "profit",
"type": "quantitative",
"scale": {
"range": ["red", "white", "green"]
}
}
}
}
Vega-Lite поддерживает множество типов шкал.
| Тип | Назначение |
|---|---|
linear |
линейная шкала |
log |
логарифмическая |
pow |
степенная |
sqrt |
квадратный корень |
symlog |
симметрическая логарифмическая |
time |
временная |
utc |
время UTC |
band |
полосовая |
point |
точечная |
ordinal |
порядковая |
Наиболее распространённый тип.
{
"scale": {
"type": "linear"
}
}
Линейная шкала сохраняет пропорции:
10 → 100 px
20 → 200 px
30 → 300 px
Используется для:
Применяется для данных с огромным разбросом значений.
{
"scale": {
"type": "log"
}
}
Пример данных:
1
10
100
1000
10000
Без логарифмической шкалы малые значения будут практически незаметны.
Логарифмические шкалы:
Неверно:
0
-10
15
Корректно:
1
10
100
{
"scale": {
"type": "log",
"base": 10
}
}
Основание может быть:
10;2;Math.E.{
"scale": {
"type": "pow",
"exponent": 2
}
}
Используется при нелинейном распределении данных.
{
"scale": {
"type": "sqrt"
}
}
Часто применяется для:
Для временных данных Vega-Lite автоматически использует
time.
{
"encoding": {
"x": {
"field": "date",
"type": "temporal"
}
}
}
{
"scale": {
"type": "utc"
}
}
Используются при:
Порядковые шкалы сопоставляют категории визуальным значениям.
{
"scale": {
"type": "ordinal"
}
}
Пример:
"A" → красный
"B" → синий
"C" → зелёный
Используются для столбчатых диаграмм.
{
"scale": {
"type": "band"
}
}
Band-шкала:
Похожи на band-шкалы, но не выделяют ширину полосы.
{
"scale": {
"type": "point"
}
}
Часто используются в:
{
"scale": {
"paddingInner": 0.1
}
}
{
"scale": {
"paddingOuter": 0.05
}
}
Параметр zero определяет, должен ли domain включать
ноль.
{
"scale": {
"zero": true
}
}
Особенно важно для:
Неверный масштаб может визуально искажать данные.
Например:
95
96
97
98
99
Если ось начинается с 95, различия будут выглядеть
огромными.
Если с 0 — различия будут интерпретироваться
корректнее.
Параметр nice округляет domain до «красивых»
значений.
{
"scale": {
"nice": true
}
}
Например:
Исходный domain:
[3, 97]
После nice:
[0, 100]
clamp ограничивает значения внутри диапазона.
{
"scale": {
"clamp": true
}
}
Если значение выходит за пределы domain, оно будет «прижато» к границе.
Инвертирует направление шкалы.
{
"scale": {
"reverse": true
}
}
Полезно для:
Цветовые шкалы — одна из важнейших частей Vega-Lite.
{
"encoding": {
"color": {
"field": "temperature",
"type": "quantitative"
}
}
}
{
"encoding": {
"color": {
"field": "category",
"type": "nominal"
}
}
}
Vega-Lite поддерживает встроенные схемы.
{
"scale": {
"scheme": "viridis"
}
}
Популярные схемы:
| Схема | Тип |
|---|---|
viridis |
последовательная |
magma |
последовательная |
plasma |
последовательная |
inferno |
последовательная |
blues |
монохромная |
tableau10 |
категориальная |
category10 |
категориальная |
Дивергентные шкалы используются при наличии центральной точки.
Например:
убыток ← 0 → прибыль
Пример:
{
"scale": {
"domain": [-100, 0, 100],
"range": ["red", "white", "green"]
}
}
Управляет интерполяцией цветов.
{
"scale": {
"interpolate": "lab"
}
}
Варианты:
rgb;lab;hcl;hsl.Размер также управляется шкалой.
{
"encoding": {
"size": {
"field": "population",
"type": "quantitative"
}
}
}
{
"scale": {
"range": [10, 1000]
}
}
{
"encoding": {
"opacity": {
"field": "density",
"type": "quantitative"
}
}
}
Полезно при:
Иногда шкалу необходимо отключить.
{
"scale": null
}
Пример:
{
"encoding": {
"color": {
"value": "red",
"scale": null
}
}
}
В составных визуализациях шкалы могут быть независимыми.
{
"resolve": {
"scale": {
"y": "independent"
}
}
}
Это особенно важно при:
По умолчанию Vega-Lite пытается объединять шкалы.
{
"resolve": {
"scale": {
"color": "shared"
}
}
}
Легенды автоматически строятся на основе шкал.
Данные → Шкала → Легенда
Изменение шкалы автоматически изменяет:
Оси также напрямую связаны со шкалами.
Scale → Axis
Поэтому параметры:
влияют и на отображение осей.
Используются для:
Примеры:
linear;log;sqrt;time.Используются для:
Примеры:
ordinal;band;point.Vega-Lite автоматически выбирает шкалу на основе
type.
| Тип данных | Шкала |
|---|---|
quantitative |
linear |
temporal |
time |
nominal |
ordinal |
ordinal |
point / band |
При биннинге шкалы работают особым образом.
{
"x": {
"field": "value",
"bin": true
}
}
Vega-Lite:
Позволяют частично контролировать domain.
{
"scale": {
"domainMin": 0,
"domainMax": 100
}
}
Используется для дивергентных шкал.
{
"scale": {
"domainMid": 0
}
}
Округляет вычисленные значения до целых пикселей.
{
"scale": {
"round": true
}
}
Это уменьшает размытие линий.
Общий padding:
{
"scale": {
"padding": 10
}
}
Особенно полезен для:
Управляет распределением band-элементов.
{
"scale": {
"align": 0.5
}
}
Создаются автоматически:
{
"x": {
"field": "value"
}
}
Настраиваются вручную:
{
"x": {
"field": "value",
"scale": {
"type": "log",
"domain": [1, 1000]
}
}
}
zero: true;{
"type": "nominal"
}
для числовых данных приводит к дискретизации.
0
10
100
создаёт некорректную визуализацию.
{
"domain": [95, 100]
}
может искусственно преувеличивать различия.
Радужные палитры:
В Vega-Lite шкалы являются фундаментальным уровнем абстракции между:
Именно шкалы превращают набор абстрактных значений в полноценную визуальную структуру, обеспечивая: