Поле labels в спецификациях Vega-Lite и Vega относится к одному из ключевых механизмов управления текстовыми подписями на визуализациях: отображением значений данных, подписей осей, легенд и аннотаций. Архитектура системы не сводит labels к единственному полю данных, а распределяет управление ими между несколькими слоями: mark properties, encoding channels, axis/legend configuration и transform-проекциями.
В Vega-Lite отсутствует единое универсальное поле
labels, как в некоторых высокоуровневых библиотеках
визуализации. Вместо этого используется концептуальная модель:
text)Такое разделение позволяет независимо управлять различными типами подписей без конфликта между слоями визуализации.
Основной способ включения labels, привязанных к данным, реализуется
через mark text.
{
"mark": "text",
"encoding": {
"x": {"field": "x", "type": "quantitative"},
"y": {"field": "y", "type": "quantitative"},
"text": {"field": "value", "type": "quantitative"}
}
}
В данном случае labels формируются через канал text,
который фактически выполняет роль поля отображаемой подписи.
Включение достигается добавлением encoding:
text → активирует отображениеtext → labels не создаются"text": {"field": "name"}
Отключение достигается удалением encoding или заменой на null-поведение через transform:
{
"mark": "text",
"encoding": {
"text": null
}
}
или полным удалением канала:
{
"mark": "point",
"encoding": {
"x": {"field": "x", "type": "quantitative"},
"y": {"field": "y", "type": "quantitative"}
}
}
В этом случае labels отсутствуют полностью, поскольку нет текстового mark.
Axis labels представляют отдельный уровень системы и управляются
через axis.labels.
По умолчанию оси отображают подписи автоматически, если ось активна:
{
"encoding": {
"x": {"field": "category", "type": "nominal"},
"y": {"field": "value", "type": "quantitative"}
}
}
Явное включение:
"axis": {
"labels": true
}
Отключение выполняется через флаг labels: false:
{
"encoding": {
"x": {
"field": "category",
"type": "nominal",
"axis": {
"labels": false
}
}
}
}
В этом режиме ось сохраняется, но текстовые подписи скрываются, включая автоматическое форматирование категорий.
Axis labels также поддерживают:
labelAnglelabelLimitlabelOverlaplabelColorlabelFontSizeЭти параметры не включают и не выключают labels напрямую, но регулируют их отображение и читаемость.
Legend labels управляются через legend.label*
параметры.
По умолчанию legend отображает labels, если есть категориальная шкала:
{
"mark": "point",
"encoding": {
"color": {"field": "type", "type": "nominal"}
}
}
Отключение выполняется через:
"legend": {
"labelFontSize": 0
}
или более корректно:
"legend": null
Полное отключение legend убирает и labels, и сам блок легенды.
labelExpr — трансформация текстаlabelLimit — обрезкаlabelFont — типографикаLabels могут быть включены или отключены динамически через
condition.
"text": {
"condition": {
"test": "datum.value > 10",
"value": "datum.value"
},
"value": null
}
В этом случае:
Подход применяется для уменьшения визуального шума на плотных графиках.
Хотя формально labels не выключаются через эти параметры, часто используется визуальное подавление:
"mark": {
"type": "text",
"opacity": 0
}
или:
"fontSize": 0
Такой подход сохраняет структуру данных, но убирает визуальное представление.
В Vega-Lite трансформации могут влиять на labels косвенно:
calculate → формирует текстfilter → удаляет элементы с labelsaggregate → изменяет плотность подписейПример генерации labels через вычисление:
"transform": [
{
"calculate": "datum.value + ' units'",
"as": "labelText"
}
],
"encoding": {
"text": {"field": "labelText"}
}
В Vega labels представлены через mark definitions:
{
"type": "text",
"encode": {
"enter": {
"text": {"field": "value"},
"x": {"field": "x"},
"y": {"field": "y"}
}
}
}
Отключение:
"text": {"value": ""}
Vega предоставляет более точный контроль, но требует явного описания каждого слоя.
| Аспект | Vega-Lite | Vega |
|---|---|---|
| Уровень абстракции | высокий | низкий |
| labels как поле | через encoding | через mark encode |
| авто-оси labels | есть | нет |
| отключение labels | axis.labels: false | ручное удаление |
| гибкость | ограниченная | максимальная |
При большом количестве точек labels становятся фактором деградации производительности:
Типовые стратегии отключения:
Labels часто заменяются tooltip-слоем:
"encoding": {
"tooltip": [
{"field": "name"},
{"field": "value"}
]
}
В этом случае:
Механизм labels в Vega/Vega-Lite представляет многослойную систему:
text encodingaxis.labelslegend.label*conditionТакая архитектура обеспечивает независимое управление текстовой информацией на разных уровнях визуализации и позволяет точно балансировать между информативностью и визуальной перегрузкой.