В спецификациях Vega-Lite поле legend относится к
механизму управления легендами — визуальными компонентами, которые
объясняют соответствие между данными и визуальными переменными (цветом,
формой, размером, прозрачностью и другими каналами кодирования).
Легенда в контексте Vega и Vega-Lite не является автономным
элементом, а всегда привязана к конкретному encoding channel.
Это означает, что легенда автоматически выводится на основе
используемого кодирования данных, но может быть полностью переопределена
через конфигурацию legend.
В Vega-Lite визуальные каналы (color,
shape, size, opacity,
strokeDash и др.) могут быть связаны с полями данных. Когда
канал является дискретным или непрерывным, система автоматически
определяет необходимость легенды.
Пример базового связывания:
{
"mark": "point",
"encoding": {
"x": { "field": "x", "type": "quantitative" },
"y": { "field": "y", "type": "quantitative" },
"color": { "field": "category", "type": "nominal" }
}
}
В этом случае color создаёт легенду автоматически,
поскольку категориальная переменная требует отображения
соответствий.
Поле legend может задаваться внутри encoding или через
глобальные настройки config.legend.
Формат:
"color": {
"field": "category",
"type": "nominal",
"legend": {
"title": "Категории",
"orient": "right"
}
}
Ключевые свойства:
title — заголовок легендыorient — расположениеformat — форматирование значенийvalues — фиксированный список значенийdirection — направление элементовsymbolType — форма маркеровlabelFont, labelFontSize — стилизация
текстаПри отсутствии явного определения Vega-Lite анализирует тип данных:
Например:
"color": {
"field": "value",
"type": "quantitative"
}
Приводит к созданию градиентной легенды (color ramp), а не дискретного списка.
Свойство orient управляет размещением легенды:
"right" — справа (дефолт)"left" — слева"top" — сверху"bottom" — снизу"none" — отключение отображенияПример:
"legend": {
"orient": "bottom"
}
Размещение влияет на layout всей визуализации, особенно при множественных легендах.
Свойство values позволяет ограничить набор отображаемых
категорий:
"legend": {
"values": ["A", "B", "C"]
}
Это особенно важно при:
Свойство format применяется к значениям шкалы:
"legend": {
"format": ".2f"
}
Поддерживаются d3-format спецификации. Для временных данных применяется d3-time-format.
Пример для даты:
"legend": {
"format": "%Y-%m"
}
Для дискретных легенд (например, color +
nominal) можно управлять внешним видом маркеров:
"legend": {
"symbolType": "square",
"symbolSize": 100
}
Возможные значения symbolType:
Для количественных переменных легенда превращается в цветовую шкалу (gradient legend).
Пример:
"color": {
"field": "temperature",
"type": "quantitative",
"legend": {
"title": "Температура"
}
}
Здесь легенда отображает:
Легенда отключается явно:
"legend": null
или
"legend": false
Это применяется при:
В Vega-Lite возможно централизованное управление легендами:
"config": {
"legend": {
"labelFontSize": 12,
"titleFontSize": 14,
"padding": 10
}
}
Эти параметры применяются ко всем легендам, если не переопределены локально.
Если используются несколько encoding-каналов, возможно появление нескольких легенд:
"encoding": {
"color": { "field": "A", "type": "nominal" },
"shape": { "field": "B", "type": "nominal" },
"size": { "field": "C", "type": "quantitative" }
}
Результат:
colorshapesizeУправление каждой осуществляется независимо.
При использовании transform-операций (filter, aggregate, calculate) легенда может:
Особенно это заметно при aggregate:
"transform": [
{ "aggregate": [{ "op": "sum", "field": "value", "as": "total" }] }
]
Легенда отражает уже агрегированные данные.
Легенда напрямую зависит от scale:
scale определяет отображение данныхlegend интерпретирует результат этого отображенияПример:
"color": {
"field": "score",
"type": "quantitative",
"scale": { "scheme": "blues" },
"legend": { "title": "Оценка" }
}
Изменение scale автоматически влияет на визуальное
представление легенды.
В Vega legend задаётся более низкоуровнево через legends
в scales, где требуется явное управление доменами и
диапазонами.
В отличие от этого, Vega-Lite:
Типовая полная конфигурация:
"color": {
"field": "group",
"type": "nominal",
"legend": {
"title": "Группа данных",
"orient": "right",
"symbolType": "circle",
"labelFontSize": 12,
"titleFontSize": 14,
"values": ["A", "B", "C"]
}
}
Эта структура управляет:
В интерактивных спецификациях legend может участвовать в событиях:
Пример:
"selection": {
"sel": { "type": "multi", "fields": ["category"] }
}
При связывании с легендой элементы становятся интерактивными фильтрами.
Поведение legend можно интерпретировать как результат
взаимодействия трёх уровней:
В Vega-Lite этот процесс максимально автоматизирован, но при этом
остаётся полностью управляемым через декларативную конфигурацию
legend.