Легенда в Vega и Vega-Lite является связующим звеном между визуальными каналами и семантическим значением данных. Она не отображает данные напрямую, а интерпретирует их отображение через шкалы (scales), обеспечивая обратное соответствие между визуальными переменными и исходными полями датасета.
В декларативной модели визуализации легенда автоматически выводится
из определения шкал, но может быть полностью переопределена через
конфигурацию legend в блоке encoding.
В Vega-Lite легенда всегда привязана к шкале (scale), которая участвует в кодировании одного из визуальных каналов:
coloropacitysizeshapestrokefillКаждый из этих каналов может быть связан с полем данных через
encoding, например:
{
"mark": "circle",
"encoding": {
"color": {
"field": "category",
"type": "nominal"
}
}
}
В этом случае Vega-Lite автоматически создаёт легенду, потому что номинальная шкала требует отображения соответствий между значениями категории и цветами.
Легенда создаётся автоматически при выполнении условий:
nominal,
ordinal)Пример отключения:
{
"encoding": {
"color": {
"field": "category",
"type": "nominal",
"legend": null
}
}
}
Базовая структура legend в Vega-Lite:
"legend": {
"title": "Категория",
"orient": "right",
"direction": "vertical"
}
Ключевые параметры:
title — заголовок легендыorient — позиция (right, left, top, bottom)direction — направление элементов (vertical,
horizontal)format — форматирование значенийlabelColor — цвет текста метокsymbolType — тип маркера (circle, square, stroke)"legend": {
"title": "Тип продукта"
}
Заголовок может быть отключён:
"legend": {
"title": null
}
Используется для числовых или временных шкал:
"legend": {
"format": ".2f"
}
Для дат:
"legend": {
"format": "%Y-%m"
}
Форматирование наследует правила d3-format и d3-time-format.
Параметр orient определяет положение относительно
графика:
rightlefttopbottomПример:
"legend": {
"orient": "bottom"
}
В Vega-Lite расположение влияет на перераспределение пространства в layout-композиции.
Параметр direction управляет тем, как элементы легенды
располагаются:
"legend": {
"direction": "horizontal"
}
Типичные сценарии:
"legend": {
"symbolType": "square"
}
Поддерживаемые значения:
"legend": {
"symbolSize": 100
}
"legend": {
"labelColor": "#333"
}
Также доступны:
labelFontlabelFontSizelabelOpacity"color": {
"field": "category",
"type": "nominal",
"legend": {
"title": "Категории"
}
}
Создаётся список значений с цветными маркерами.
Для количественных данных:
"color": {
"field": "value",
"type": "quantitative"
}
Легенда превращается в градиентную шкалу.
Градиент отображается как непрерывная полоса:
"legend": {
"gradientLength": 200,
"gradientThickness": 10
}
Дополнительные параметры:
gradientDirectiontickCountformat"legend": {
"tickCount": 5
}
или более явно:
"legend": {
"values": [0, 10, 20, 30, 40]
}
В Vega (не Vega-Lite) легенда описывается как отдельный компонент в
блоке legends:
{
"legends": [
{
"fill": "colorScale",
"title": "Категории"
}
]
}
Здесь легенда напрямую связывается со шкалой scale.
Один визуал может содержать несколько легенд:
"legends": [
{
"fill": "colorScale"
},
{
"size": "sizeScale"
}
]
Каждая легенда управляет своим каналом независимо.
Отключение для конкретного канала:
"encoding": {
"color": {
"field": "category",
"legend": false
}
}
Глобальное подавление возможно через:
"config": {
"legend": {
"disable": true
}
}
Легенда может участвовать в интерактивных фильтрах:
"selection": {
"sel": {
"type": "multi",
"fields": ["category"],
"bind": "legend"
}
}
При клике по элементу легенды происходит фильтрация данных.
Vega-Lite позволяет переопределять поведение легенды через
encode:
"legend": {
"encode": {
"labels": {
"update": {
"fontSize": {"value": 12}
}
}
}
}
Возможные блоки:
labelssymbolstitle"legend": {
"sort": "ascending"
}
или пользовательский порядок:
"legend": {
"sort": ["A", "B", "C"]
}
При использовании transform легенда отражает уже
преобразованные данные:
"transform": [
{"calculate": "datum.value * 100", "as": "scaled"}
]
"encoding": {
"color": {
"field": "scaled",
"type": "quantitative"
}
}
Легенда автоматически адаптируется к новому диапазону значений.
При комбинированном кодировании:
"encoding": {
"color": {"field": "a", "type": "nominal"},
"shape": {"field": "b", "type": "nominal"}
}
формируются две независимые легенды, каждая из которых отображает свою шкалу.
В фасетированных визуализациях:
Если одновременно используются:
facettitlelegend.orientможет возникнуть перераспределение пространства, влияющее на:
"legend": true
означает использование поведения по умолчанию, без кастомизации.
Дополнительные параметры:
offset — отступ от графикаpadding — внутренние отступыcornerRadius — скругление символовstrokeColor — цвет рамки символаЕсли данные содержат null:
nullscale.domainЛегенда выступает как декларативная мета-модель: