В Vega-Lite управление размещением визуальных элементов строится
вокруг набора параметров, которые определяют размеры, отступы, поведение
масштабирования и структуру составных визуализаций. Формально термин
«layout» не является единым полем в спецификации верхнего уровня, однако
функционально распределение пространства реализуется через совокупность
свойств width, height, padding,
autosize, а также через layout-конфигурации для
мультивизуализаций: facet, concat,
repeat.
Базовое управление размером графика задаётся через параметры
width и height.
Ключевые особенности:
Пример минимальной конфигурации:
{
"data": {"url": "data.json"},
"mark": "bar",
"width": 400,
"height": 200,
"encoding": {
"x": {"field": "category", "type": "nominal"},
"y": {"field": "value", "type": "quantitative"}
}
}
В случае faceting или повторения (facet,
repeat) эти параметры начинают трактоваться как размеры
одной ячейки, а не всей композиции.
Поле autosize управляет тем, как график реагирует на
размеры контейнера и содержимого.
Основные режимы:
pad — добавляет отступы для осей и подписейfit — подгоняет содержимое под доступное
пространствоnone — фиксированная область без адаптацииfit-x и fit-y — частичная адаптация по
осямПример:
{
"autosize": {
"type": "fit",
"contains": "padding"
}
}
Поведение autosize напрямую влияет на layout системы:
padding определяет пространство между границей view и
областью отрисовки.
Возможные формы:
{
"padding": {
"left": 10,
"right": 20,
"top": 5,
"bottom": 30
}
}
Роль padding в layout:
contains: paddingВнутренний layout view в Vega-Lite включает несколько слоёв:
Именно комбинация этих слоёв определяет итоговый размер визуального блока.
Особенность заключается в том, что оси и легенды могут изменять
фактическую геометрию, не изменяя width и
height.
Facet создаёт сетку подграфиков, где layout становится структурным элементом композиции.
{
"facet": {
"row": {"field": "category", "type": "nominal"}
},
"spec": {
"mark": "line",
"encoding": {
"x": {"field": "year", "type": "temporal"},
"y": {"field": "value", "type": "quantitative"}
}
}
}
columns — количество колонокspacing — расстояние между ячейкамиbounds — правило вычисления границПример:
{
"facet": {
"field": "category",
"type": "nominal",
"columns": 3
},
"spacing": 15
}
spacing управляет визуальной плотностью сетки, влияя на читаемость и группировку данных.
Concat объединяет несколько независимых визуализаций в линейный layout.
{
"hconcat": [
{
"mark": "bar",
"encoding": {
"x": {"field": "a"},
"y": {"field": "b"}
}
},
{
"mark": "line",
"encoding": {
"x": {"field": "a"},
"y": {"field": "c"}
}
}
]
}
Типы:
hconcat — горизонтальное размещениеvconcat — вертикальное размещениеconcat — общий контейнерresolveRepeat создаёт сетку графиков на основе набора полей.
{
"repeat": {
"column": ["a", "b", "c"]
},
"spec": {
"mark": "point",
"encoding": {
"x": {"field": {"repeat": "column"}},
"y": {"field": "value"}
}
}
}
Layout поведение:
В составных визуализациях важным элементом является
resolve.
{
"resolve": {
"scale": {"y": "independent"},
"axis": {"y": "shared"}
}
}
Влияние на layout:
shared — синхронизация размеров осейindependent — независимые области рисованияЭто напрямую влияет на итоговое распределение пространства между подграфиками.
Параметр bounds определяет, учитываются ли элементы вне
основной области при расчёте layout.
Значения:
full — учитывать всё содержимоеflush — игнорировать внешние элементы{
"bounds": "flush"
}
Использование влияет на:
Хотя явного поля aspect ratio нет в базовой схеме, пропорции задаются через комбинацию:
Для равномерных графиков часто фиксируется соотношение:
{
"width": 300,
"height": 300
}
В responsive-режимах пропорции могут нарушаться при fit
autosize, что становится частью layout-стратегии.
В составных layout-структурах spacing управляет визуальной иерархией:
Пример глобальной настройки:
{
"config": {
"facet": {
"spacing": 20
}
}
}
Глобальный объект config влияет на layout поведение всех
визуализаций.
Основные поля:
viewpaddingfacetconcatПример:
{
"config": {
"view": {
"stroke": "transparent"
},
"facet": {
"spacing": 10
}
}
}
Это создаёт единый стиль распределения пространства.
Vega-Lite транслируется в Vega, где layout становится более низкоуровневым графовым вычислением.
На этапе компиляции:
Именно на этом этапе происходит окончательное вычисление геометрии элементов, включая координаты, размеры и отступы.
Механизм распределения пространства в Vega-Lite складывается из нескольких взаимосвязанных уровней:
width, height)autosize)padding)facet, concat,
repeat)resolve)spacing)bounds)Совокупность этих параметров формирует итоговую модель размещения, в которой каждая визуализация существует как элемент структурированного layout-графа.