Тип path в Vega представляет собой низкоуровневый
графический примитив для отображения произвольных векторных контуров. В
отличие от более специализированных типов графиков (например,
line, area, bar),
path оперирует непосредственно строкой SVG Path Data или
структурой, которая может быть преобразована в такую строку.
Ключевая особенность path заключается в
том, что он не ограничен моделью «набор точек → интерполяция». Вместо
этого используется прямое описание геометрии через команды перемещения
пера, линий, кривых Безье и дуг.
Это делает path базовым строительным блоком для сложных
визуальных форм:
В основе path лежит формат SVG Path Data, который
представляет собой строку команд:
M x y — перемещение пера (move to)L x y — линия (line to)C x1 y1 x2 y2 x y — кубическая кривая БезьеQ x1 y1 x y — квадратичная криваяA rx ry x-axis-rotation large-arc-flag sweep-flag x y —
дугаZ — замыкание контураПример базового пути:
"M10 10 L100 10 L100 100 L10 100 Z"
Этот путь описывает прямоугольник.
В Vega такие строки могут поступать:
path в VegaВ спецификации Vega mark типа path задаёт визуальный
элемент, который использует строку пути из поля данных.
Минимальная структура:
{
"type": "path",
"from": { "data": "table" },
"encode": {
"enter": {
"path": { "field": "d" },
"stroke": { "value": "black" },
"fill": { "value": null }
}
}
}
Здесь:
path.field указывает на поле, содержащее SVG path
stringstroke задаёт обводкуfill задаёт заливкуФундаментальное ограничение: Vega не интерпретирует геометрию path — он только отображает её.
path от
line и areaТипы line и area в Vega-Lite строятся из
набора точек и применяют интерполяцию. path работает
иначе:
| Тип | Входные данные | Геометрия | Гибкость |
|---|---|---|---|
line |
массив точек | интерполированная линия | средняя |
area |
массив точек | замкнутая область | средняя |
path |
строка SVG или геометрия | произвольная | максимальная |
Ключевое отличие: path не требует
дискретных данных.
Vega предоставляет механизмы генерации path-строк через трансформации.
geopath)Один из наиболее распространённых случаев — генерация контуров из GeoJSON.
{
"type": "geoshape",
"from": { "data": "world" },
"encode": {
"enter": {
"fill": { "value": "#ddd" },
"stroke": { "value": "#999" }
}
}
}
Хотя используется geoshape, внутри Vega происходит
построение path-строк.
В визуализациях графов (force-directed layouts) рёбра часто представляются как path:
{
"type": "path",
"from": { "data": "links" },
"encode": {
"enter": {
"path": { "field": "path" },
"stroke": { "value": "#4682b4" },
"strokeWidth": { "value": 1.5 }
}
}
}
Здесь поле path может содержать:
M x y L x y)Преимущество: можно визуализировать сложные связи, включая изгибы и маршрутизацию.
Vega поддерживает вычисляемые выражения для формирования path:
{
"type": "path",
"encode": {
"enter": {
"path": {
"signal": "'M' + x(d.x) + ',' + y(d.y)"
}
}
}
}
Хотя такой подход редко используется для сложных кривых, он
демонстрирует принцип: path — это строка, которую можно
собрать программно.
path часто применяется там, где стандартные mark-типы
недостаточны.
Обычный line ограничен равномерной интерполяцией.
path позволяет:
Пример логики:
M0,50 C10,20 40,20 50,50 L100,50
Sankey-подобные визуализации используют path для потоков:
Каждый поток — отдельный path.
Маршруты транспорта и навигации:
Представляются кривыми Безье для визуального сглаживания.
В Vega доступен полный набор SVG-стилей:
strokestrokeWidthstrokeDashstrokeOpacityfillfillOpacityПример стилизации:
{
"stroke": { "value": "steelblue" },
"strokeWidth": { "value": 2 },
"strokeDash": { "value": [4, 2] },
"fill": { "value": null }
}
Важно: заполнение (fill) имеет смысл
только для замкнутых path (Z).
Хотя path сам по себе не выполняет интерполяцию, он
часто содержит заранее вычисленные кривые.
Типичные подходы:
C)Q)A)Пример плавной кривой:
M10 80 C 40 10, 65 10, 95 80
Такая форма часто используется для:
Внутри Vega движка path проходит несколько стадий:
В зависимости от конфигурации:
d атрибутИспользование path имеет особенности
производительности:
Преимущества:
Недостатки:
При больших наборах данных часто предпочтительнее:
line с интерполяциейpath редко используется изолированно. Он часто
комбинируется:
symbol для узлов графаtext для подписейrule для вспомогательных линийПример графа:
symbolpathtextВ Vega-Lite прямой доступ к path ограничен, но он
используется внутри:
geoshapeПример GeoJSON визуализации:
{
"mark": "geoshape",
"data": { "url": "world.json" }
}
Хотя пользователь задаёт geoshape, на уровне Vega это
превращается в набор path-объектов.
1. Некорректная строка path
Пропущенные команды или координаты приводят к:
2. Несогласованность системы координат
Path должен соответствовать шкалам x и
y.
3. Отсутствие замыкания контура
Без Z заливка может вести себя непредсказуемо.
4. Чрезмерная сложность кривых
Слишком детализированные Bezier-кривые ухудшают производительность.
При ручном формировании path обычно применяются принципы:
path выступает как универсальный слой абстракции
между:
Он является финальной формой почти любой сложной линии или контура, проходящей через систему Vega.