Mark rule в Vega-Lite представляет собой геометрический
примитив для отображения линейных элементов в декартовой системе
координат. В отличие от точек (point) или областей (area),
rule не описывает дискретные наблюдения, а фиксирует
линейные связи, ориентиры и справочные значения.
В контексте Vega данный mark является базовым графическим примитивом низкого уровня, который интерпретируется как отрезок, заданный двумя точками в координатной плоскости.
Ключевая особенность rule заключается в том, что он:
rule описывается через две опорные точки:
Либо через частичное определение, где одна из координат фиксируется автоматически.
Таким образом, rule можно интерпретировать как:
В терминах визуальной грамматики это делает mark универсальным инструментом построения линейных аннотаций.
Для построения rule используются следующие encoding
channels:
Определяют начальную и конечную позицию по оси X.
x: стартовая координатаx2: конечная координатаЕсли задан только x, а y фиксирован,
формируется вертикальная линия.
Аналогично для оси Y:
y: стартy2: конецПри наличии только y получается горизонтальная
линия.
Определяет цвет линии. Часто используется для выделения:
Толщина линии, критически важна для семантического веса:
Позволяет интегрировать rule в плотные графики без
визуального конфликта с основными mark-слоями.
rule наследует все свойства системы координат:
При этом координаты x, y, x2,
y2 всегда интерпретируются в пространстве после
применения шкал (scales).
Частый случай — отображение фиксированных уровней:
Пример логики:
y = mean(value)x = 0, x2 = widthИспользуются для обозначения событий во времени:
Здесь фиксируется x, а линия тянется по
y.
rule может описывать не только бесконечные ориентиры, но
и конечные отрезки:
В Vega-Lite rule часто комбинируется с трансформациями
данных:
aggregatecalculatejoinaggregateЭто позволяет строить статистические линии без предварительной подготовки данных.
Типичный паттерн:
rule поверх scatter/line графика,{
"mark": "rule",
"encoding": {
"y": { "value": 50 },
"x": { "value": 0 },
"x2": { "value": 400 },
"color": { "value": "red" },
"strokeWidth": { "value": 2 }
}
}
Здесь формируется горизонтальная линия, фиксированная на уровне y = 50.
{
"mark": "rule",
"encoding": {
"y": {
"aggregate": "mean",
"field": "value"
},
"x": { "value": 0 },
"x2": { "value": 400 },
"color": { "value": "black" }
}
}
Линия автоматически вычисляется как среднее значение поля
value.
rule практически всегда используется в
layered-архитектуре:
Такой подход обеспечивает разделение:
При изменении размеров графика:
rule, заданная через x2/y2,
пересчитывается через scales,value остаются в
пиксельной системе координат.Это создаёт два режима:
rule выполняет функцию структурного каркаса
визуализации:
В плотных диаграммах именно rule часто определяет, как
пользователь интерпретирует числовую ось, даже если она не явно
подписана.
Несмотря на универсальность, rule имеет ряд
архитектурных особенностей:
Эти ограничения делают его предсказуемым и стабильным элементом визуальной системы.
В декларативной парадигме mark rule выступает как:
В отличие от императивного рисования, где линия создаётся через последовательность команд, здесь она описывается через связь данных и координат, что обеспечивает согласованность с остальной визуализацией.