Марка trail представляет собой расширение линейной визуализации, в которой сегменты линии обладают изменяющейся толщиной. В отличие от стандартной линии, где геометрия передаёт только форму траектории, trail добавляет третье измерение выразительности — ширину вдоль пути, позволяя кодировать дополнительную количественную переменную.
В основе trail лежит концепция направленного следа, где каждый отрезок между точками данных интерпретируется как часть непрерывного пути, а визуальная толщина этого пути динамически изменяется в зависимости от значений данных.
Марка trail используется для отображения последовательностей, где важна не только форма изменения, но и интенсивность или вес на каждом участке траектории.
Ключевые характеристики:
size.Trail фактически объединяет свойства линии и области, сохраняя при этом направленность и читаемость временных рядов.
Основное различие между trail и line заключается в способе отображения величины:
Line отвечает на вопрос «как изменяется значение во времени или по оси X», тогда как trail добавляет слой интерпретации: «насколько интенсивно это изменение в каждой точке».
В терминах визуального языка:
В Vega-Lite trail задаётся через поле mark.
{
"mark": "trail",
"encoding": {
"x": { "field": "time", "type": "temporal" },
"y": { "field": "value", "type": "quantitative" }
}
}
Эта конструкция создаёт базовую линию пути без вариации толщины.
Чтобы trail проявил свои свойства, необходимо использовать канал
size.
Основная сила trail раскрывается через привязку размера к данным:
{
"mark": "trail",
"encoding": {
"x": { "field": "time", "type": "temporal" },
"y": { "field": "value", "type": "quantitative" },
"size": { "field": "intensity", "type": "quantitative" }
}
}
Здесь переменная intensity управляет толщиной линии.
Каждый сегмент траектории получает собственное значение ширины, создавая
эффект «живого» графика, где визуальный вес изменяется вдоль пути.
Для корректного построения trail критически важно определить порядок
соединения точек. Это осуществляется через канал order.
{
"mark": "trail",
"encoding": {
"x": { "field": "x", "type": "quantitative" },
"y": { "field": "y", "type": "quantitative" },
"order": { "field": "step", "type": "quantitative" },
"size": { "field": "weight", "type": "quantitative" }
}
}
Без явного порядка линия может соединять точки произвольно, что приводит к искажению траектории.
Trail особенно эффективен для временных рядов, где необходимо отразить одновременно:
Пример структуры данных:
[
{ "date": "2024-01-01", "value": 30, "load": 5 },
{ "date": "2024-01-02", "value": 45, "load": 12 },
{ "date": "2024-01-03", "value": 40, "load": 8 }
]
Спецификация:
{
"mark": "trail",
"encoding": {
"x": { "field": "date", "type": "temporal" },
"y": { "field": "value", "type": "quantitative" },
"size": { "field": "load", "type": "quantitative" }
}
}
В результате формируется график, где толщина линии отражает нагрузку или активность в каждый момент времени.
Trail часто применяется для отображения движения объектов в
пространстве. В этом случае координаты x и y
описывают позицию, а size — скорость или другой параметр
динамики.
При таком использовании trail превращается в инструмент анализа поведения систем:
Trail поддерживает многомерное кодирование данных через дополнительные каналы:
color — разделение траекторий по категориям;opacity — контроль визуальной плотности;detail — разбиение на независимые линии.Пример:
{
"mark": "trail",
"encoding": {
"x": { "field": "time", "type": "temporal" },
"y": { "field": "value", "type": "quantitative" },
"size": { "field": "volume", "type": "quantitative" },
"color": { "field": "group", "type": "nominal" },
"detail": { "field": "id", "type": "nominal" }
}
}
Такая конфигурация позволяет отображать одновременно несколько независимых потоков данных.
Trail наследует поведение интерполяции от линейных марок Vega. При
необходимости сглаживания используется конфигурация
interpolate.
{
"mark": {
"type": "trail",
"interpolate": "monotone"
}
}
Доступные методы интерполяции влияют на характер соединения точек:
При использовании size важно учитывать диапазон значений. Слишком широкий разброс приводит к визуальным искажениям:
Для управления этим используется масштабирование через
scale:
{
"size": {
"field": "value",
"type": "quantitative",
"scale": { "range": [1, 10] }
}
}
Такое ограничение обеспечивает читаемость даже при высоких вариациях данных.
Trail может комбинироваться с другими марками Vega-Lite через слой
layer. Это позволяет добавлять вспомогательные элементы
поверх траектории:
Пример:
{
"layer": [
{
"mark": "trail",
"encoding": {
"x": { "field": "t", "type": "temporal" },
"y": { "field": "v", "type": "quantitative" },
"size": { "field": "s", "type": "quantitative" }
}
},
{
"mark": "point",
"encoding": {
"x": { "field": "t" },
"y": { "field": "v" }
}
}
]
}
Такая комбинация усиливает интерпретацию динамики данных.
В Vega-Lite trail является абстракцией над низкоуровневым mark
"trail" в Vega. На уровне Vega происходит разбиение линии
на сегменты, где каждый сегмент получает собственные визуальные
атрибуты.
Это объясняет ключевое поведение:
Некорректное применение часто связано с неправильной структурой данных:
order при несортированных данных;size.Особенно критично отсутствие упорядочивания, так как оно полностью разрушает траекторию.
Trail применяется в задачах, где требуется объединение формы и интенсивности:
Его выразительность заключается в способности одновременно передавать направление, динамику и масштаб изменений без введения дополнительных графиков.