Vega-LiteVega-Lite
строится вокруг декларативного описания визуализаций, где ключевым
механизмом связывания данных с графическими элементами выступает поле
encoding. Именно через него определяется, каким образом
столбцы данных отображаются на визуальные каналы: координаты, цвет,
размер, форму, прозрачность и другие свойства маркировки.
Внутри модели Vega-Lite каждая визуализация рассматривается как композиция трёх базовых компонентов: источник данных, описание графических примитивов (mark) и правила отображения (encoding). Последний компонент задаёт формальную связь между абстрактными данными и их визуальной интерпретацией.
Поле encoding представляет собой словарь, где ключами
выступают визуальные каналы, а значениями — описания того, как данные
преобразуются для отображения.
Типичная структура:
{
"mark": "point",
"encoding": {
"x": { "field": "a", "type": "quantitative" },
"y": { "field": "b", "type": "quantitative" }
}
}
Здесь x и y являются каналами
позиционирования, а field указывает на столбцы данных.
В Vega-Lite визуальные каналы делятся на несколько категорий:
Каждое поле encoding требует указания типа данных через
type. Это определяет, как Vega-Lite интерпретирует
значения:
quantitative — числовые данныеtemporal — даты и времяnominal — категориальные данные без порядкаordinal — упорядоченные категорииТип влияет на выбор шкал (scales), осей и даже допустимых трансформаций.
Пример:
{
"encoding": {
"x": {
"field": "date",
"type": "temporal"
},
"y": {
"field": "value",
"type": "quantitative"
}
}
}
Здесь временная ось автоматически получает соответствующее форматирование и интервалы.
Наиболее фундаментальные каналы — x и y.
Они определяют геометрию расположения mark-элементов.
Для quantitative данных применяется непрерывная
шкала:
"x": { "field": "sales", "type": "quantitative" }
Для категориальных данных используется дискретное распределение:
"x": { "field": "category", "type": "nominal" }
При необходимости можно явно управлять шкалой:
"x": {
"field": "category",
"type": "nominal",
"sort": "ascending"
}
Канал color применяется для кодирования третьего
измерения или группировки.
"color": {
"field": "region",
"type": "nominal"
}
Для количественных данных цвет часто становится градиентом:
"color": {
"field": "temperature",
"type": "quantitative",
"scale": { "scheme": "reds" }
}
Цветовая шкала формируется автоматически, но может быть
переопределена через scale, включая:
Канал size используется для отображения величины через
геометрические размеры элементов.
"size": {
"field": "population",
"type": "quantitative"
}
В точечных диаграммах размер может отражать значимость наблюдения, создавая эффект многомерной визуализации.
Канал shape чаще всего применяется для номинальных
данных:
"shape": {
"field": "type",
"type": "nominal"
}
Он особенно полезен в scatter plot, где цвет уже занят другой переменной, а необходимо дополнительное измерение различий.
Канал opacity позволяет регулировать плотность
отображения:
"opacity": {
"field": "confidence",
"type": "quantitative"
}
Прозрачность часто применяется для:
Канал text напрямую связывает данные с отображаемыми
подписями.
"text": {
"field": "label",
"type": "nominal"
}
Также возможно комбинирование нескольких полей:
"text": {
"aggregate": "sum",
"field": "sales",
"type": "quantitative"
}
Канал tooltip добавляет интерактивный слой информации
без перегрузки основной визуализации.
"tooltip": [
{ "field": "name", "type": "nominal" },
{ "field": "value", "type": "quantitative" }
]
Tooltip не влияет на геометрию, но расширяет семантическое пространство данных.
Vega-Lite позволяет выполнять агрегирование прямо в encoding, без предварительной трансформации данных.
"x": {
"aggregate": "mean",
"field": "value",
"type": "quantitative"
}
Поддерживаются операции:
Агрегация изменяет смысл канала: вместо отдельных наблюдений отображается сводная статистика.
Канал scale управляет преобразованием данных в
визуальные значения.
"color": {
"field": "value",
"type": "quantitative",
"scale": {
"type": "log"
}
}
Поддерживаются:
Масштабирование критично при работе с неравномерными распределениями.
Сила encoding проявляется в комбинации нескольких каналов одновременно:
{
"mark": "circle",
"encoding": {
"x": { "field": "gdp", "type": "quantitative" },
"y": { "field": "lifeExp", "type": "quantitative" },
"color": { "field": "continent", "type": "nominal" },
"size": { "field": "population", "type": "quantitative" }
}
}
Такой подход формирует многомерное представление, где каждый канал добавляет независимое измерение данных.
В Vega-Lite возможна иерархия encoding:
{
"layer": [
{
"mark": "point",
"encoding": {
"x": { "field": "a", "type": "quantitative" }
}
},
{
"mark": "line",
"encoding": {
"x": { "field": "a", "type": "quantitative" },
"y": { "field": "b", "type": "quantitative" }
}
}
]
}
Каждый слой может переопределять отдельные каналы, сохраняя общую структуру данных.
Encoding в Vega-Lite не описывает алгоритм построения графика, а фиксирует соответствие между данными и визуальными переменными. Это означает:
VegaVega выступает нижележащим уровнем, куда Vega-Lite компилируется. Именно там encoding превращается в набор вычисляемых операторов, шкал и сцен-графов.
Во время компиляции Vega-Lite:
Каждый канал становится частью графа вычислений, где данные проходят цепочку преобразований до финального рендеринга.
Некоторые ограничения накладываются автоматически:
Эти ограничения формируют строгую типовую систему визуализации.
Каналы row и column позволяют развернуть
данные в сетку подграфиков:
"facet": {
"row": { "field": "region", "type": "nominal" }
}
Каждая ячейка получает собственный subset данных, а encoding применяется локально внутри каждого подграфика.
Encoding выступает центральным связующим механизмом между абстрактной таблицей данных и визуальной формой. Через него задаётся:
Модель Vega-Lite превращает encoding в формальный язык описания многомерных отображений, где каждый канал становится независимой осью интерпретации данных.