В системах декларативной визуализации Vega и Vega-Lite порядок
отображения графических примитивов определяется не только структурой
данных, но и несколькими уровнями управления компоновкой. Среди ключевых
механизмов выделяются sort и zindex, которые
решают разные, хотя и пересекающиеся задачи: упорядочивание элементов
внутри одного набора данных и управление слоями визуальных марок.
В Vega каждая визуализация строится как набор marks — графических примитивов (rect, circle, line, text и т.д.), которые рендерятся последовательно. Порядок отрисовки влияет на перекрытие: последний отрисованный элемент оказывается поверх предыдущих.
Однако прямое следование порядку данных часто недостаточно. В реальных визуализациях требуется:
Для этого используются два механизма: sort и
zindex.
sort определяет, в каком порядке элементы данных внутри
одного mark будут визуально обработаны и отрисованы. Это влияет прежде
всего на:
В Vega sort может быть задан:
sort внутри encoding.Наиболее частый сценарий — управление порядком отрисовки линий и областей.
Если несколько линий рисуются в одном mark (например, через группировку по категории), порядок влияет на то, какая линия окажется сверху при пересечении:
{
"mark": "line",
"encoding": {
"x": {"field": "x", "type": "quantitative"},
"y": {"field": "y", "type": "quantitative"},
"color": {"field": "category"},
"detail": {"field": "category"},
"sort": {"field": "category", "order": "ascending"}
}
}
Здесь sort влияет на порядок обработки групп
category. При пересечениях линий это определяет, какая
линия визуально «побеждает».
В линиях sort критичен для соединения точек:
sort гарантирует монотонный проход по
оси.В областях sort влияет на:
В точечных графиках влияние слабее, но sort может
менять:
sort часто применяется вместе с:
window (скользящие вычисления);aggregate (группировка);stack (накопительные диаграммы).Например, в стековых диаграммах неправильная сортировка приводит к искажению визуальной структуры слоёв.
zindex определяет слой отрисовки марка относительно
других марок, независимо от данных. Это более глобальный механизм по
сравнению с sort.
Если sort управляет порядком внутри набора данных, то
zindex управляет порядком между разными визуальными
слоями.
Каждая марка может иметь числовой zindex:
{
"layer": [
{
"mark": {"type": "area", "zindex": 0},
"encoding": {
"x": {"field": "x"},
"y": {"field": "baseline"}
}
},
{
"mark": {"type": "line", "zindex": 1},
"encoding": {
"x": {"field": "x"},
"y": {"field": "value"}
}
},
{
"mark": {"type": "point", "zindex": 2},
"encoding": {
"x": {"field": "x"},
"y": {"field": "value"}
}
}
]
}
Здесь:
zindex особенно важен при:
Например, при наведении выделенная линия может временно получать
повышенный zindex, чтобы перекрывать остальные графики.
sort — локальный порядок внутри данных одного
mark;zindex — глобальный порядок между марками.| Механизм | Назначение | Уровень |
|---|---|---|
| sort | порядок элементов данных | внутри mark |
| zindex | порядок слоёв визуализации | между marks |
sort влияет на геометрию построения (особенно
line/area);zindex влияет на визуальное перекрытие уже построенных
объектов.Эти механизмы не заменяют друг друга и часто работают совместно:
sort определяет форму и внутреннюю
последовательность;zindex определяет, какая форма окажется сверху.Например:
sort;zindex всегда будет
визуально перекрывать A.При визуализации нескольких временных рядов:
sort обеспечивает корректное соединение точек по
времени;zindex управляет тем, какая серия визуально
приоритетнее.При наложении:
zindex;sort используется внутри каждой серии данных.При hover:
zindex;sort не меняется, чтобы не ломать геометрию.Приводит к:
Ошибочная попытка исправить порядок данных через слои приводит к:
Избыточное использование:
Внутри Vega-экосистемы порядок отрисовки можно рассматривать как двухуровневую систему:
sort) — формирует
геометрию;zindex) —
формирует слоистость.Разделение этих уровней позволяет строить сложные визуализации без нарушения логики данных и без потери управляемости визуального слоя.