В спецификациях Vega и Vega-Lite поле mark определяет
тип графического примитива, которым визуализируются данные. Это
центральный элемент декларативной модели: именно он связывает данные с
их визуальным воплощением.
В Vega-Lite mark задаёт высокоуровневую семантику («что
рисовать»), а в Vega трансформируется в низкоуровневые графические
примитивы (marks), управляемые сценографом (scenegraph). Несмотря на
различие уровней абстракции, концептуально система marks строится вокруг
единой идеи: каждый визуальный объект — это mark с набором свойств и
данных.
В Vega-Lite marks организованы не как плоский список, а как иерархическая структура, где один визуал может включать вложенные композиции:
Это основные типы визуализации:
barlineareapointcirclesquarerecttickruletextgeoshapeКаждый из них задаёт базовую геометрическую интерпретацию данных.
Пример:
{
"mark": "bar"
}
Здесь вся визуализация интерпретируется как набор прямоугольников.
Композиционные конструкции формируют иерархию визуализаций:
layer — наложение нескольких marksfacet — разбиение данных на подграфикиrepeat — повторение одной схемыconcat — последовательное размещение графиковresolve — управление масштабами и осями между
слоямиЭти конструкции формируют дерево визуализации, где каждый узел может
содержать собственный mark.
Пример слоя:
{
"layer": [
{ "mark": "line" },
{ "mark": "point" }
]
}
Иерархия здесь выглядит так:
Layer
├── Line mark
└── Point mark
facet создаёт подграфики, каждый из которых имеет
собственный набор marks.
{
"facet": {
"row": { "field": "category", "type": "nominal" }
},
"spec": {
"mark": "bar"
}
}
Иерархия:
Facet (разбиение по category)
├── Bar chart (category A)
├── Bar chart (category B)
└── Bar chart (category C)
Каждый подграфик — самостоятельный mark-дерево.
pointИспользуется для отображения дискретных наблюдений.
{ "mark": "point" }
Применяется в scatter plot и как дополнение к линиям.
circle и squareСпециализированные версии point с фиксированной
формой.
circle — кругиsquare — квадратыЧасто используются для улучшения читаемости плотных данных.
barОдин из ключевых marks в Vega-Lite.
Иерархически bar часто выступает как корневой mark в
простых визуализациях.
lineИспользуется для непрерывных данных.
Внутренне представляет последовательность соединённых line segments.
areaРасширение line, где область под линией
закрашивается.
rectБазовый прямоугольный примитив.
ruleЛиния-ориентир:
tickКраткая метка на оси:
textПозволяет отображать подписи.
geoshapeСпециализированный mark для геоданных.
В Vega marks представлены как узлы scenegraph и имеют более сложную структуру:
Вся визуализация начинается с root group mark:
group (root)
├── axes
├── legends
└── data marks
Group mark — ключевой элемент иерархии:
Базовые графические элементы:
rectsymbolpathtextarcОни не содержат вложенности, но могут быть частью group.
Marks могут находиться в различных контекстах трансформации:
Каждый уровень может иметь:
Group A
└── Group B (shifted)
└── Marks
Marks могут быть связаны с разными уровнями данных:
Каждый mark получает encoding:
x, ycolorsizeshapeEncoding может переопределяться на уровне слоя или фасета.
layer в Vega-Lite формирует стек визуальных слоёв:
Типичная структура:
Layer
├── Area (background)
├── Line (trend)
└── Point (observations)
Это создаёт мультимарковую систему поверх одной шкалы.
repeat создаёт повторяющиеся mark-структуры:
Иерархия:
Repeat container
├── Mark instance 1
├── Mark instance 2
└── Mark instance 3
В композициях marks возникает необходимость согласования:
resolve управляет этим поведением:
Это влияет на визуальную иерархию, но не на структуру данных.
Marks в Vega-Lite обладают декларативной реактивностью:
Внутренне система пересобирает дерево marks, а не изменяет отдельные элементы точечно.
Marks не существуют отдельно от data pipeline:
transform изменяет входные данныеmark отображает результат трансформацииencoding связывает поля с визуальными каналамиТипичный поток:
Data → Transform → Encoding → Mark → Scenegraph
Обобщённая структура:
Spec
├── Composition (layer/facet/repeat)
│ ├── Subspec
│ │ ├── Mark
│ │ └── Encoding
│ └── Subspec
└── Resolve rules
Это дерево является основой всей декларативной модели визуализации в Vega-Lite и компилируется в scenegraph Vega.