Конфигурационный объект в Vega-Lite и Vega представляет собой центральный механизм управления глобальными и локальными визуальными настройками, позволяющий отделять описание данных и логики визуализации от стилистических и поведенческих параметров. Архитектура config построена как иерархическая система наследуемых значений, где общие правила задаются на верхнем уровне, а затем уточняются для конкретных компонентов визуализации.
В основе лежит объект, содержащий набор секций, каждая из которых отвечает за определённую часть визуального представления:
Базовая структура Vega-Lite config выглядит следующим образом:
const config = {
background: "#ffffff",
padding: 10,
axis: {},
axisX: {},
axisY: {},
legend: {},
title: {},
view: {},
scale: {},
range: {},
mark: {},
bar: {},
line: {},
area: {},
point: {},
rect: {},
text: {},
rule: {},
style: {},
locale: {}
};
В Vega (низкоуровневом языке) структура расширяется за счёт дополнительных элементов, включая более детальную настройку сигналов и проекций, однако принцип организации config остаётся аналогичным — каскадная система переопределений.
Конфигурация работает по принципу каскада:
Иерархия позволяет управлять стилем без дублирования параметров в каждом описании графика.
На верхнем уровне config находятся свойства, влияющие на весь визуальный объект.
background: "#f5f5f5",
padding: 20
background определяет фон всей визуализацииpadding задаёт внешние отступы между графиком и
границами контейнераЭти параметры формируют базовую «рамку» визуализации.
Секция axis управляет отображением координатных осей. Она может быть глобальной или специализированной:
axis — общие настройкиaxisX — настройки оси XaxisY — настройки оси Yaxis: {
labelFontSize: 12,
titleFontSize: 14,
grid: true,
domainColor: "#333",
tickSize: 5
}
Типичная структура включает:
labelFont, labelColor,
labelAngle)grid, domain,
tick)offset, tickSize)Специализированные axisX и axisY позволяют переопределять поведение по осям:
axisX: {
labelAngle: -45
},
axisY: {
grid: true
}
Legend config управляет отображением условных обозначений.
legend: {
orient: "right",
labelFontSize: 12,
symbolSize: 100,
titleFontSize: 13
}
Основные параметры:
orient — расположение (left, right, top, bottom)symbolSize — размер маркеровlabelFontSize — текст подписиtitleFontSize — заголовок легендыЛегенда тесно связана со шкалами, поскольку отображает их домены.
Scale config определяет поведение отображения данных в визуальные координаты.
scale: {
bandPaddingInner: 0.1,
bandPaddingOuter: 0.2,
pointPadding: 0.5
}
Основные группы настроек:
Шкалы в Vega являются одним из ключевых механизмов трансформации данных.
View config определяет базовое поведение холста визуализации.
view: {
stroke: "#ccc",
fill: null,
continuousHeight: 300,
continuousWidth: 400
}
Часто используемые параметры:
stroke — рамка области визуализацииfill — заливка фона viewwidth / height (в Vega, частично в
Vega-Lite)Одной из ключевых особенностей config является возможность задавать стили для конкретных типов графических примитивов.
mark: {
color: "#4c78a8"
},
bar: {
binSpacing: 2
},
line: {
interpolate: "linear",
strokeWidth: 2
},
area: {
opacity: 0.6
},
point: {
size: 60
}
Каждый тип mark имеет собственный набор параметров:
Принцип работы заключается в том, что конфигурация задаёт дефолтные стили, а спецификация графика может их переопределять.
Style config позволяет создавать именованные стилистические наборы,
применяемые к отдельным элементам через свойство style.
style: {
"cell": {
stroke: "#ddd"
},
"guide-label": {
fontSize: 11,
fill: "#666"
},
"guide-title": {
fontWeight: "bold"
}
}
Механизм style работает как система CSS-классов:
title: {
fontSize: 16,
font: "Arial",
anchor: "start",
color: "#222"
}
Параметры включают:
Заголовки могут применяться к всему графику и отдельным слоям.
Range config управляет распределением значений шкал в визуальные ресурсы:
range: {
category: ["#4c78a8", "#f58518", "#e45756"],
ordinal: ["#72b7b2", "#54a24b", "#eeca3b"],
ramp: ["blue", "red"]
}
Используется для:
Locale config отвечает за форматирование чисел, дат и подписей.
locale: {
number: {
decimal: ".",
thousands: ","
},
time: {
dateTime: "%Y-%m-%d"
}
}
Включает:
В Vega-Lite config поддерживает параметры для компоновочных операторов:
facet: {
spacing: 10
},
concat: {
spacing: 20
},
repeat: {
spacing: 15
}
Эти параметры управляют:
Конфигурация строится как многоуровневая система переопределений:
config (глобальный уровень)mark / axis / legend (типовые
настройки)style (именованные стили)Эта модель позволяет создавать масштабируемые визуальные системы, где изменение одного параметра распространяется на множество элементов без ручного редактирования каждого слоя.
const config = {
background: "#ffffff",
padding: 15,
axis: {
labelFontSize: 12,
titleFontSize: 14,
grid: true
},
legend: {
orient: "bottom"
},
mark: {
color: "#4c78a8"
},
line: {
strokeWidth: 2
},
area: {
opacity: 0.5
},
range: {
category: ["#4c78a8", "#f58518", "#e45756"]
},
view: {
stroke: "#e0e0e0"
}
};
Такая структура демонстрирует типичное распределение ответственности между секциями config и их взаимодействие через механизм наследования.
Vega-Lite использует более высокоуровневую абстракцию, где config влияет на генерацию Vega-спецификации. Vega config, в свою очередь, применяется непосредственно к рендерингу.
Различия проявляются в:
Несмотря на различия, структура конфигурации сохраняет единый принцип — централизованное управление визуальным стилем и поведением через иерархический объект.