tick — специализированный тип графического элемента в
Vega-Lite, предназначенный для отображения отдельных значений вдоль
одной оси. Визуально tick представляет собой короткую линию,
ориентированную вертикально или горизонтально. Такой тип визуализации
особенно полезен для компактного отображения распределений, сравнений
категорий и построения минималистичных статистических графиков.
Tick-графики занимают промежуточное положение между точечными
диаграммами (point) и столбчатыми диаграммами
(bar):
point, tick имеет длину;bar, tick не кодирует величину
площадью.Минимальный пример:
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"data": {
"values": [
{"category": "A", "value": 10},
{"category": "B", "value": 25},
{"category": "C", "value": 18}
]
},
"mark": "tick",
"encoding": {
"x": {"field": "category", "type": "nominal"},
"y": {"field": "value", "type": "quantitative"}
}
}
В данном примере:
x располагаются категории;y — числовые значения;Tick всегда строится вокруг одной координаты:
x;y.Фактически tick — это короткий сегмент линии, центрированный относительно координаты значения.
По умолчанию tick вертикален:
{
"mark": "tick",
"encoding": {
"x": {"field": "month", "type": "ordinal"},
"y": {"field": "temperature", "type": "quantitative"}
}
}
Для горизонтального отображения используется свойство
orient.
{
"mark": {
"type": "tick",
"orient": "horizontal"
},
"encoding": {
"x": {"field": "salary", "type": "quantitative"},
"y": {"field": "department", "type": "nominal"}
}
}
В этом случае tick становится горизонтальной линией.
Размер tick регулируется параметром size.
{
"mark": {
"type": "tick",
"size": 30
}
}
Чем больше значение size, тем длиннее отметка.
Размер можно кодировать данными:
{
"mark": "tick",
"encoding": {
"x": {"field": "category", "type": "nominal"},
"y": {"field": "value", "type": "quantitative"},
"size": {"field": "importance", "type": "quantitative"}
}
}
Такой подход позволяет визуально выделять более важные элементы.
{
"mark": {
"type": "tick",
"color": "darkred"
}
}
{
"mark": "tick",
"encoding": {
"x": {"field": "country", "type": "nominal"},
"y": {"field": "population", "type": "quantitative"},
"color": {"field": "region", "type": "nominal"}
}
}
Каждый регион получает собственный цвет.
Толщина задаётся через thickness.
{
"mark": {
"type": "tick",
"thickness": 3
}
}
По сути это аналог strokeWidth для tick.
{
"mark": {
"type": "tick",
"opacity": 0.5
}
}
{
"mark": "tick",
"encoding": {
"x": {"field": "name", "type": "nominal"},
"y": {"field": "score", "type": "quantitative"},
"opacity": {"field": "confidence", "type": "quantitative"}
}
}
Tick отлично подходит для отображения агрегированных статистик.
{
"mark": "tick",
"encoding": {
"x": {"field": "group", "type": "nominal"},
"y": {
"aggregate": "mean",
"field": "value",
"type": "quantitative"
}
}
}
{
"layer": [
{
"mark": {
"type": "tick",
"color": "red"
},
"encoding": {
"x": {"field": "category", "type": "nominal"},
"y": {
"aggregate": "min",
"field": "price",
"type": "quantitative"
}
}
},
{
"mark": {
"type": "tick",
"color": "green"
},
"encoding": {
"x": {"field": "category", "type": "nominal"},
"y": {
"aggregate": "max",
"field": "price",
"type": "quantitative"
}
}
}
]
}
Tick часто используется внутри box plot для отображения медианы.
Пример:
{
"mark": {
"type": "boxplot",
"median": {
"color": "black",
"size": 8
}
}
}
Хотя медиана визуально напоминает tick, внутри Vega-Lite она реализуется как часть составной визуализации.
Один из наиболее распространённых сценариев использования tick — rug plot.
{
"mark": {
"type": "tick",
"orient": "vertical"
},
"encoding": {
"x": {"field": "value", "type": "quantitative"}
}
}
Такой график показывает плотность распределения значений вдоль оси.
{
"layer": [
{
"transform": [
{
"density": "value"
}
],
"mark": "line",
"encoding": {
"x": {"field": "value", "type": "quantitative"},
"y": {"field": "density", "type": "quantitative"}
}
},
{
"mark": {
"type": "tick",
"orient": "vertical",
"color": "black"
},
"encoding": {
"x": {"field": "value", "type": "quantitative"},
"y": {
"value": 0
}
}
}
]
}
Tick в нижней части графика показывает реальные наблюдения.
Tick можно смещать относительно базовой позиции.
{
"mark": {
"type": "tick",
"dx": 5,
"dy": -3
}
}
Tick поддерживает вращение через angle.
{
"mark": {
"type": "tick",
"angle": 45
}
}
Это редко используется, но может быть полезно в специализированных визуализациях.
Tick особенно эффективен в layered chart.
{
"layer": [
{
"mark": "line",
"encoding": {
"x": {"field": "date", "type": "temporal"},
"y": {"field": "price", "type": "quantitative"}
}
},
{
"mark": {
"type": "tick",
"color": "red",
"size": 20
},
"encoding": {
"x": {"field": "date", "type": "temporal"},
"y": {"field": "price", "type": "quantitative"}
}
}
]
}
Tick позволяет выделить отдельные наблюдения поверх линии.
{
"mark": "tick",
"encoding": {
"x": {"field": "product", "type": "nominal"},
"y": {"field": "sales", "type": "quantitative"},
"tooltip": [
{"field": "product"},
{"field": "sales"}
]
}
}
{
"mark": {
"type": "tick"
},
"encoding": {
"x": {"field": "category", "type": "nominal"},
"y": {"field": "value", "type": "quantitative"},
"color": {
"condition": {
"param": "hover",
"value": "orange"
},
"value": "steelblue"
}
},
"params": [
{
"name": "hover",
"select": {
"type": "point",
"on": "mouseover"
}
}
]
}
Tick часто используется для временных шкал.
{
"mark": "tick",
"encoding": {
"x": {
"field": "timestamp",
"type": "temporal"
},
"y": {
"field": "event_count",
"type": "quantitative"
}
}
}
{
"mark": "tick",
"encoding": {
"x": {
"field": "frequency",
"type": "quantitative",
"scale": {
"type": "log"
}
}
}
}
Tick хорошо работает с логарифмическими распределениями благодаря компактности.
{
"facet": {
"field": "region",
"type": "nominal"
},
"spec": {
"mark": "tick",
"encoding": {
"x": {"field": "income", "type": "quantitative"}
}
}
}
{
"transform": [
{
"filter": "datum.value > 50"
}
],
"mark": "tick",
"encoding": {
"x": {"field": "value", "type": "quantitative"}
}
}
{
"transform": [
{
"calculate": "datum.sales * datum.price",
"as": "revenue"
}
],
"mark": "tick",
"encoding": {
"x": {"field": "product", "type": "nominal"},
"y": {"field": "revenue", "type": "quantitative"}
}
}
Tick поддерживает свойства линий:
{
"mark": {
"type": "tick",
"strokeCap": "round"
}
}
Возможные значения:
buttroundsquare| Свойство | tick | point |
|---|---|---|
| Форма | линия | точка |
| Длина | есть | нет |
| Компактность | высокая | средняя |
| Выразительность распределений | высокая | средняя |
| Свойство | tick | bar |
|---|---|---|
| Отображение величины | позиция | длина |
| Площадь | отсутствует | присутствует |
| Минимализм | высокий | средний |
| Нагрузка на восприятие | низкая | выше |
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"data": {
"url": "data/stocks.csv"
},
"mark": {
"type": "tick",
"thickness": 2,
"color": "darkblue"
},
"encoding": {
"x": {
"field": "date",
"type": "temporal"
},
"y": {
"field": "price",
"type": "quantitative"
}
}
}
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"data": {
"values": [
{"value": 5},
{"value": 8},
{"value": 9},
{"value": 12},
{"value": 13},
{"value": 15},
{"value": 18}
]
},
"mark": {
"type": "tick",
"orient": "vertical",
"size": 15
},
"encoding": {
"x": {
"field": "value",
"type": "quantitative"
}
}
}
{
"layer": [
{
"mark": {
"type": "rule",
"strokeWidth": 2
},
"encoding": {
"x": {"field": "category"},
"y": {"field": "min"},
"y2": {"field": "max"}
}
},
{
"mark": {
"type": "tick",
"color": "red",
"size": 25,
"thickness": 3
},
"encoding": {
"x": {"field": "category"},
"y": {"field": "mean"}
}
}
]
}
Tick в данном случае показывает среднее значение внутри диапазона.