В Vega-Lite визуализация строится вокруг декларативного описания
графика, где ключевым элементом является слой mark. Он
определяет, каким способом данные будут отображены: точками, линиями,
областями, текстом или более сложными визуальными примитивами. Понимание
типов mark и их сокращённой записи критично для
эффективного построения спецификаций, поскольку именно этот слой задаёт
визуальную семантику графика.
mark в
архитектуре Vega-LiteПоле mark задаёт визуальное представление каждой строки
данных после применения трансформаций и масштабирования. Внутренне
Vega-Lite компилирует декларативную спецификацию в Vega-спецификацию,
где каждый mark превращается в графический примитив с
определённым рендерингом.
Ключевая идея:
mark = визуальная интерпретация данных
В отличие от систем, где стиль задаётся через набор графических параметров, Vega-Lite использует концепцию типизированных маркеров, каждый из которых имеет предопределённое поведение.
markpoint — точечное
отображениеИспользуется для отображения отдельных наблюдений.
{
"mark": "point"
}
Особенности:
Типичные сценарии:
circle — круговые
маркерыВариация point, где форма фиксирована как круг.
{
"mark": "circle"
}
Отличие от point:
square — квадратные
маркерыАльтернативная форма точечного представления.
{
"mark": "square"
}
Использование:
tick — линейные отметкиОтображает данные в виде коротких линий вдоль оси.
{
"mark": "tick"
}
Характеристики:
bar — столбчатая
диаграммаОдин из наиболее используемых типов mark.
{
"mark": "bar"
}
Семантика:
Особенности реализации:
line — линейные графикиИспользуется для отображения непрерывных зависимостей.
{
"mark": "line"
}
Поведение:
Применение:
area — заполненная
областьРасширение линейного графика с заливкой под кривой.
{
"mark": "area"
}
Особенности:
line и заполнениеТипичные случаи:
text — текстовые
маркерыИспользуется для отображения подписей и значений.
{
"mark": "text"
}
Характеристики:
encoderule — линии-ориентирыГрафический маркер в виде линии, часто вертикальной или горизонтальной.
{
"mark": "rule"
}
Использование:
markVega-Lite поддерживает упрощённый синтаксис, где mark
задаётся строкой вместо объекта.
{
"mark": "bar"
}
Это эквивалентно полной форме:
{
"mark": {
"type": "bar"
}
}
При создании простых графиков сокращённая форма уменьшает объём кода:
{
"data": {"url": "data.csv"},
"mark": "point",
"encoding": {
"x": {"field": "a", "type": "quantitative"},
"y": {"field": "b", "type": "quantitative"}
}
}
Сокращённая запись делает визуализацию более декларативной и компактной, убирая избыточные уровни вложенности.
Любой строковый mark может быть расширен в объектную
форму без изменения поведения.
Пример расширения:
"mark": "line"
эквивалентно:
"mark": {
"type": "line"
}
markДаже при использовании сокращённой записи mark может
быть расширен дополнительными параметрами, но уже через объектную
форму.
{
"mark": {
"type": "line",
"strokeWidth": 3
}
}
{
"mark": {
"type": "point",
"opacity": 0.5
}
}
mark в зависимости от данныхТип mark не является изолированным параметром — он
взаимодействует с:
scale)encoding)aggregate){
"mark": "bar",
"encoding": {
"y": {"aggregate": "sum", "field": "value", "type": "quantitative"}
}
}
Здесь bar визуализирует агрегированное значение, а не
отдельные записи.
mark через слоиХотя mark обычно задаёт один тип визуализации, Vega-Lite
позволяет комбинировать несколько mark через
layer.
{
"layer": [
{
"mark": "line"
},
{
"mark": "point"
}
]
}
Такой подход позволяет накладывать разные визуальные представления одного набора данных.
mark
на рендерингКаждый тип mark в Vega трансформируется в графические
примитивы Canvas или SVG:
point → символы (path или circle)line → path с сегментамиbar → прямоугольникиarea → замкнутые pathtext → текстовые узлы DOM/SVGТаким образом, выбор mark определяет не только
визуальный стиль, но и структуру итогового рендера.
marklineТребует сортировки данных по оси X, иначе соединение точек будет произвольным.
barЧувствителен к масштабированию осей и типу шкалы (обычно
ordinal или band).
areaНуждается в базовой линии (baseline), которая по умолчанию равна нулю.
textТребует явного указания поля через encoding.text.
"mark": {
"type": "circle"
}
"mark": "circle"
Обе формы компилируются в идентичное внутреннее представление Vega-Lite и дают одинаковый результат визуализации, различаясь только уровнем декларативной детализации на уровне спецификации.
markВыбор типа mark определяется характером данных:
point, circle,
squareline, areabartext, ruletick, circleТип mark в Vega-Lite выступает не как декоративный
параметр, а как фундаментальная семантическая ось визуализации
данных.