В Vega-Lite легенды являются декларативным способом описания связи
между визуальными каналами (цвет, форма, размер, прозрачность и др.) и
исходными данными. В терминологии спецификации используется поле
legend, которое настраивается внутри encoding
для конкретного канала либо глобально через
config.legend.
В контексте Vega-Lite легенда не является отдельным объектом интерфейса, а вычисляется автоматически на основе шкал (scales), типов данных и применённых трансформаций. В Vega легенды могут быть описаны более низкоуровнево, как часть системы guide components, но концептуально подход остаётся схожим: легенда отражает отображение данных на визуальные переменные.
Легенда связывает:
В Vega-Lite легенда создаётся автоматически, если:
legend: nullЛегенда задаётся внутри канала:
{
"mark": "point",
"encoding": {
"color": {
"field": "category",
"type": "nominal",
"legend": {
"title": "Категория"
}
}
}
}
Если legend не указан, Vega-Lite создаёт стандартную
конфигурацию автоматически.
Легенда может быть полностью отключена:
"color": {
"field": "type",
"type": "nominal",
"legend": null
}
Отключение применяется, когда:
Заголовок легенды:
"legend": {
"title": "Тип продукта"
}
При отсутствии title используется имя поля или
шкалы.
Определяет расположение:
"right" (по умолчанию)"left""top""bottom""legend": {
"orient": "bottom"
}
Определяет направление элементов:
"vertical""horizontal"Форматирование значений:
"legend": {
"format": ".2f"
}
Используется d3-format синтаксис.
Для nominal и ordinal типов данных легенда
строится как список категорий.
Пример:
"color": {
"field": "region",
"type": "nominal",
"legend": {
"title": "Регион",
"columns": 2
}
}
Для quantitative данных легенда становится
градиентной шкалой.
"color": {
"field": "value",
"type": "quantitative",
"legend": {
"title": "Значение"
}
}
При использовании bin: true создаётся дискретизация:
"color": {
"field": "age",
"type": "quantitative",
"bin": true,
"legend": {
"title": "Возраст (интервалы)"
}
}
Результат — легенда интервалов вместо непрерывной шкалы.
Для каналов shape и color можно управлять
отображением символов:
"legend": {
"symbolType": "circle",
"symbolSize": 100
}
Доступные параметры:
symbolType: форма маркераsymbolSize: размерsymbolStrokeWidth: толщина обводки"legend": {
"columns": 3
}
Используется при большом количестве категорий.
Ограничение длины текста:
"legend": {
"labelLimit": 120
}
Ограничение высоты:
"legend": {
"clipHeight": 80
}
Если элементов больше, появляется прокрутка или обрезка.
Отступы между элементами легенды:
"legend": {
"padding": 10
}
"legend": {
"labelFontSize": 12,
"labelFont": "Arial"
}
"legend": {
"labelColor": "#333"
}
В Vega-Lite легенды могут быть интерактивными фильтрами:
"legend": {
"bind": "legend"
}
При этом выбор значения в легенде может:
Легенда может быть динамической через condition:
"color": {
"condition": {
"test": "datum.value > 50",
"value": "red"
},
"value": "blue",
"legend": {
"title": "Условная легенда"
}
}
В layered charts легенды могут:
resolve: legend"resolve": {
"legend": {
"color": "independent"
}
}
Возможные режимы:
sharedindependentЧерез config.legend задаются дефолты:
{
"config": {
"legend": {
"titleFontSize": 14,
"labelFontSize": 11,
"symbolLimit": 50
}
}
}
Эти настройки применяются ко всем легендам, если не переопределены локально.
Легенда напрямую зависит от шкалы:
scale.domain → значения легендыscale.range → цвета/формыscale.type → тип легенды (discrete / continuous)Пример:
"color": {
"field": "category",
"type": "nominal",
"scale": {
"domain": ["A", "B", "C"],
"range": ["red", "green", "blue"]
},
"legend": {
"title": "Группа"
}
}
aggregate, stack) влияют на
доменНаиболее типичные:
coloropacitysizeshapestrokefillКаждый канал может иметь собственную легенду или быть объединённым через scale.
В Vega:
legendsВ Vega-Lite:
encoding"color": {
"field": "segment",
"type": "nominal",
"legend": {
"title": "Сегмент рынка"
}
}
"color": {
"field": "temperature",
"type": "quantitative",
"legend": {
"title": "Температура (°C)"
}
}
"size": {
"field": "population",
"type": "quantitative",
"legend": {
"title": "Население"
}
}