Параметр columns в легенде используется для управления
многоколоночным отображением элементов легенды в декларативных
спецификациях визуализаций, построенных на базе Vega-Lite. Он становится
особенно важным при работе с категориальными шкалами, когда количество
значений превышает вертикальное или горизонтальное пространство одного
столбца.
Легенда в Vega-Lite описывается через объект legend,
который может быть задан внутри encoding или в глобальной
конфигурации config.legend.
Базовая структура:
{
"mark": "point",
"encoding": {
"color": {
"field": "category",
"type": "nominal",
"legend": {
"columns": 3
}
}
}
}
Значение columns определяет, на сколько вертикальных
колонок будет разбит список категорий в легенде.
При задании columns Vega-Lite переключает алгоритм
компоновки легенды:
Пример распределения при columns: 2:
A D
B E
C F
При этом важно, что логика не группирует данные семантически — только визуально перераспределяет их.
columnsПри 10–30 уникальных значениях одномерная легенда становится
перегруженной. columns позволяет:
"legend": {
"columns": 4
}
При встраивании графиков в панели управления (dashboards) вертикальный размер часто фиксирован. В этом случае:
При использовании сложных наборов данных (например, временные срезы,
группы пользователей, географические регионы) число категорий быстро
растёт. columns стабилизирует визуальную структуру.
columns с другими параметрами легендыdirectionПараметр direction определяет ориентацию символов и
текста:
"vertical" — стандартное поведение;"horizontal" — символ и текст располагаются в
строку.При использовании columns:
direction: "horizontal" усиливает компактность;direction: "vertical" сохраняет классическую структуру
списка."legend": {
"columns": 3,
"direction": "horizontal"
}
symbolLimitЕсли задан symbolLimit, часть категорий может быть
скрыта с агрегацией в “others”.
При сочетании:
symbolLimit;labelLimitОграничение длины текста влияет на читаемость колонок:
columns.orientРасположение легенды (right, left,
top, bottom) влияет на доступную ширину:
right или left число колонок обычно
ограничивают 1–2;bottom можно использовать больше колонок.Внутренняя логика Vega-Lite при наличии columns:
берётся список категорий;
вычисляется количество строк:
rows = ceil(total_items / columns)элементы заполняются по столбцам;
каждая колонка выравнивается по максимальной высоте.
Таким образом, columns не меняет данные, а только задаёт
форму отображения.
{
"data": {
"values": [
{"type": "A", "value": 28},
{"type": "B", "value": 55},
{"type": "C", "value": 43},
{"type": "D", "value": 91},
{"type": "E", "value": 81},
{"type": "F", "value": 53}
]
},
"mark": "bar",
"encoding": {
"x": {"field": "type", "type": "nominal"},
"y": {"field": "value", "type": "quantitative"},
"color": {
"field": "type",
"type": "nominal",
"legend": {
"columns": 2
}
}
}
}
В этом случае легенда будет разбита на две вертикальные группы категорий, каждая из которых содержит половину элементов.
При изменении количества категорий columns адаптируется
автоматически:
Это делает параметр устойчивым в интерактивных дашбордах.
columns не учитывает смысловые связи между категориями.
Даже если данные имеют иерархию, она не сохраняется.
После задания числа колонок:
При слишком большом columns:
"legend": {
"columns": 2,
"symbolLimit": 12
}
"legend": {
"columns": 4,
"direction": "horizontal",
"labelLimit": 80
}
"legend": {
"columns": 1
}
Через config.legend параметр можно задать глобально:
{
"config": {
"legend": {
"columns": 3
}
}
}
Это влияет на все легенды визуализации, если локально не переопределено.
Модель компоновки Vega-Lite разделяет:
columns относится именно к layout-уровню, не затрагивая
семантику данных или шкал. Это делает параметр чисто визуальным, но
критически важным для плотных интерфейсов.