В Vega-Lite термин «labels» не является единым универсальным полем с фиксированной структурой во всех контекстах. Вместо этого он проявляется через несколько механизмов отображения текстовых подписей: оси (axis labels), легенды (legend labels), подписи точек (text marks) и аннотации. Общая концепция заключается в управлении текстовыми представлениями данных и метаданных визуализации через декларативные правила.
На уровне спецификации Vega-Lite ключевую роль играют следующие сущности:
axis.label)legend.label)mark: "text" + encoding)labelExpr)Подписи осей формируются автоматически на основе шкалы, но могут быть переопределены через параметры оси:
{
"mark": "point",
"encoding": {
"x": { "field": "x", "type": "quantitative" },
"y": { "field": "y", "type": "quantitative" }
},
"encoding": {
"x": {
"field": "x",
"type": "quantitative",
"axis": {
"labelAngle": -45,
"labelFontSize": 12
}
}
}
}
Ключевые параметры label-уровня осей:
labelAngle — поворот текстаlabelFontSize — размер шрифтаlabelColor — цветlabelAlign, labelBaseline —
выравниваниеformat — формат числовых значенийФорматирование через format ограничено шаблонной логикой
и не позволяет выполнять вычисления или условные преобразования.
Легенды в Vega-Lite используют отдельную подсистему отображения подписей:
{
"mark": "circle",
"encoding": {
"color": {
"field": "category",
"type": "nominal",
"legend": {
"title": "Категории",
"labelFontSize": 11,
"labelLimit": 120
}
}
}
}
Параметры легенды:
title — заголовок легендыlabelLimit — ограничение длины текста с обрезкойlabelExpr — выражение для динамического формирования
текстаformat — форматирование значенийЛегенды тесно связаны с доменом шкалы (scale domain), поэтому labels в этом контексте всегда производны от значений данных.
Наиболее гибкая форма labels реализуется через mark
"text":
{
"data": { "values": [
{ "x": 1, "y": 10, "label": "A" },
{ "x": 2, "y": 20, "label": "B" }
]},
"mark": "text",
"encoding": {
"x": { "field": "x", "type": "quantitative" },
"y": { "field": "y", "type": "quantitative" },
"text": { "field": "label" }
}
}
Здесь поле text фактически выполняет роль labels,
определяя отображаемую строку.
Дополнительные параметры управления:
align, baseline — позиционирование
текстаdx, dy — смещениеfontSize, fontWeight,
colorlimit — обрезка текстаlabelExpr и
выражения VegalabelExpr используется для динамической генерации текста
через expression language Vega. Это мощный механизм, позволяющий
вычислять строку подписи на основе входных значений, шкал и условной
логики.
{
"mark": "bar",
"encoding": {
"x": { "field": "value", "type": "quantitative" }
},
"encoding": {
"x": {
"field": "value",
"type": "quantitative",
"axis": {
"labelExpr": "datum.value + ' ед.'"
}
}
}
}
Здесь datum.value представляет значение тика оси.
Expression language Vega поддерживает:
datumПример условного labelExpr:
{
"axis": {
"labelExpr": "datum.value > 100 ? 'Высокое: ' + datum.value : datum.value"
}
}
Это позволяет формировать семантически насыщенные подписи без изменения исходных данных.
В legend выражения используются для трансформации отображаемых категорий:
{
"encoding": {
"color": {
"field": "type",
"type": "nominal",
"legend": {
"labelExpr": "'Тип: ' + datum.value"
}
}
}
}
Таким образом значения домена могут быть переименованы или расширены без предварительной обработки датасета.
Несмотря на гибкость, expression-based labels имеют ограничения:
Выражения работают только в контексте рендеринга, не влияя на исходный dataset.
В Vega-Lite labels часто зависят от scale transformation:
scalelabelExprПример форматирования дат:
{
"axis": {
"format": "%Y-%m"
}
}
При этом format является статическим механизмом, тогда
как labelExpr позволяет реализовать динамическую
логику:
{
"axis": {
"labelExpr": "timeFormat(datum.value, '%Y-%m')"
}
}
При конфликте различных механизмов применяется следующий приоритет:
labelExpr (если задан)formatЭто важно при комбинировании нескольких уровней конфигурации.
В составных графиках (facet, repeat, concat) labels могут наследоваться и переопределяться на каждом уровне:
{
"facet": {
"row": {
"field": "region",
"type": "nominal",
"header": {
"labelExpr": "'Регион: ' + datum.value"
}
}
}
}
Здесь labels применяются к заголовкам фасетов, а не к осям или данным напрямую.
Модель отображения labels строится как слой поверх:
labels не являются самостоятельным уровнем визуализации, а выступают производной представления, формируемой через правила отображения и выражения.