Система Vega и её декларативный слой Vega-Lite строится вокруг идеи компоновки визуальных представлений из независимых описаний. Базовый графический объект — вид (view) — может включать данные, шкалы, оси, преобразования и геометрические примитивы. Однако реальная сила системы проявляется при переходе к составным видам, где несколько визуализаций объединяются в единую структуру.
Вложенные составные виды представляют собой иерархическую организацию спецификаций, при которой один визуальный компонент содержит другие, формируя сложные аналитические панели, small multiples, многослойные графики и гибридные макеты.
Ключевые механизмы композиции:
Каждый механизм задаёт собственную семантику вложенности и правила наследования масштабов, осей и взаимодействий.
Механизм слоя позволяет объединять несколько геометрических представлений в одной системе координат.
{
"data": {"url": "data.csv"},
"layer": [
{
"mark": "line",
"encoding": {
"x": {"field": "x", "type": "quantitative"},
"y": {"field": "y1", "type": "quantitative"}
}
},
{
"mark": "point",
"encoding": {
"x": {"field": "x", "type": "quantitative"},
"y": {"field": "y1", "type": "quantitative"}
}
}
]
}
Слой формирует единое пространство координат. Все дочерние элементы
используют общие шкалы, если не переопределены правилами
resolve.
Layer может включать вложенные layer, формируя многоуровневую композицию:
{
"layer": [
{
"layer": [
{ "mark": "line" },
{ "mark": "point" }
]
},
{
"mark": "rule"
}
]
}
Такая структура используется для добавления аннотаций, трендовых линий, доверительных интервалов.
При объединении слоёв возникает необходимость управления шкалами и осями.
{
"resolve": {
"scale": {
"y": "independent"
}
}
}
Возможные режимы:
Независимые шкалы используются при наложении разнородных метрик:
Фасетирование создаёт сетку визуализаций, разбитую по значениям категориального признака.
{
"data": {"url": "data.csv"},
"facet": {
"row": {"field": "category", "type": "nominal"}
},
"spec": {
"mark": "bar",
"encoding": {
"x": {"field": "value", "type": "quantitative"},
"y": {"field": "name", "type": "nominal"}
}
}
}
Каждый facet-узел представляет собой отдельный view с одинаковой структурой спецификации.
Facet поддерживает:
{
"facet": {
"row": {"field": "region"},
"column": {"field": "year"}
}
}
Фасетирование фактически выполняет группировку данных:
Фасеты могут быть вложены через spec, создавая многослойную сетку:
{
"facet": {
"row": {"field": "country"}
},
"spec": {
"facet": {
"column": {"field": "product"}
},
"spec": {
"mark": "line"
}
}
}
Такая структура создаёт двухуровневую сегментацию:
Repeat позволяет автоматически клонировать одну визуализацию по наборам полей.
{
"repeat": {
"column": ["a", "b", "c"]
},
"spec": {
"mark": "line",
"encoding": {
"x": {"field": "x"},
"y": {"field": {"repeat": "column"}}
}
}
}
Repeat формирует набор идентичных views с подстановкой полей.
{
"repeat": {
"row": ["a", "b"],
"column": ["c", "d"]
}
}
Результат — матрица графиков.
Concat объединяет независимые визуализации в единый layout без общего coordinate system.
{
"hconcat": [
{ "mark": "bar" },
{ "mark": "line" }
]
}
{
"vconcat": [
{ "mark": "area" },
{ "mark": "point" }
]
}
Concat используется для сравнительных панелей.
Композиционные механизмы могут комбинироваться:
{
"facet": {
"row": {"field": "group"}
},
"spec": {
"layer": [
{ "mark": "line" },
{ "mark": "point" }
]
}
}
Каждый facet-узел содержит layered chart.
{
"layer": [
{
"repeat": {
"column": ["a", "b"]
},
"spec": {
"mark": "line"
}
}
]
}
Комбинации позволяют строить многомерные структуры визуального анализа.
Вложенные виды используют систему локального контекста.
{
"params": [
{
"name": "brush",
"select": "interval"
}
]
}
Параметры:
При вложении:
Вложенные структуры управляют шкалами:
{
"resolve": {
"scale": {
"x": "independent",
"y": "independent"
}
}
}
В Vega композиция задаётся через view hierarchy.
{
"type": "group",
"marks": [],
"scales": [],
"axes": [],
"signals": [],
"encode": {}
}
Group view может содержать дочерние group:
{
"signals": [
{
"name": "x",
"update": "width / 2"
}
]
}
Сигналы могут быть:
Комбинация facet + layer:
Комбинация concat + independent scales:
Layer + resolve:
Глубокая композиция влияет на:
Оптимизация достигается через:
Каждый уровень вложенности может:
Facet выполняет partitioning, layer выполняет overlay, repeat выполняет parameter expansion, concat выполняет layout aggregation.
Вложенные составные виды формируют граф структуры:
Эта модель позволяет строить визуализации, которые переходят от одиночных графиков к многомерным аналитическим системам без перехода к императивному программированию.