В Vega-Lite параметр представляет собой именованное состояние, которое хранит значение и может динамически изменяться под воздействием пользовательского ввода или внутренних вычислений. Параметры используются для управления фильтрацией данных, условным форматированием, переключением режимов визуализации и построением интерактивных сцен.
Каждый параметр определяется на уровне спецификации и становится
доступным внутри выражений через функцию param().
Структурно параметр включает:
name)value)bind)select, toggle,
interval и др.)Параметры задаются в массиве params внутри
спецификации:
{
data: { url: "data.csv" },
params: [
{
name: "threshold",
value: 50,
bind: { input: "range", min: 0, max: 100, step: 1 }
}
],
mark: "bar",
encoding: {
x: { field: "category", type: "nominal" },
y: { field: "value", type: "quantitative" }
}
}
В этом примере параметр threshold связан с ползунком.
Его значение изменяется в реальном времени и может использоваться в
выражениях.
param() в
выраженияхФункция param() используется внутри выражений Vega-Lite
для получения текущего значения параметра.
Синтаксис:
param("имя_параметра")
Она применяется в:
param() для фильтрации данныхОдин из базовых сценариев — динамическая фильтрация:
{
data: { url: "data.json" },
params: [
{
name: "minValue",
value: 10,
bind: { input: "range", min: 0, max: 100 }
}
],
transform: [
{
filter: "datum.value >= param('minValue')"
}
],
mark: "point",
encoding: {
x: { field: "x", type: "quantitative" },
y: { field: "value", type: "quantitative" }
}
}
Здесь param('minValue') определяет порог, ниже которого
данные исключаются из визуализации.
param()Параметры часто используются для изменения визуальных свойств элементов без пересборки графика.
{
params: [
{
name: "highlight",
value: "A",
bind: {
input: "select",
options: ["A", "B", "C"]
}
}
],
mark: "bar",
encoding: {
x: { field: "category", type: "nominal" },
y: { field: "value", type: "quantitative" },
color: {
condition: {
test: "datum.category === param('highlight')",
value: "orange"
},
value: "lightgray"
}
}
}
Механизм param() позволяет создавать реактивные условия
без изменения структуры данных.
В Vega-Lite параметры часто комбинируются с transform → calculate:
{
params: [
{
name: "scaleFactor",
value: 1.5
}
],
transform: [
{
calculate: "datum.value * param('scaleFactor')",
as: "scaledValue"
}
],
mark: "line",
encoding: {
y: { field: "scaledValue", type: "quantitative" }
}
}
Здесь параметр выступает как внешний множитель, влияющий на вычисляемое поле.
Привязка параметра к интерфейсу управления позволяет создавать интерактивные панели управления без внешнего JavaScript-кода.
Поддерживаемые типы:
range — ползунокselect — выпадающий списокcheckbox — переключательradio — набор кнопокtext — текстовый вводПример:
{
params: [
{
name: "opacityLevel",
value: 0.8,
bind: { input: "range", min: 0, max: 1, step: 0.05 }
}
],
mark: "circle",
encoding: {
opacity: { value: { expr: "param('opacityLevel')" } }
}
}
Параметры часто используются для переключения режимов визуализации:
{
params: [
{
name: "logScale",
value: false,
bind: { input: "checkbox" }
}
],
mark: "point",
encoding: {
y: {
field: "value",
type: "quantitative",
scale: {
type: { expr: "param('logScale') ? 'log' : 'linear'" }
}
}
}
}
Такой подход позволяет изменять поведение шкалы без модификации самой схемы данных.
Параметры могут представлять диапазоны, включая brush-интеракции:
{
params: [
{
name: "brush",
select: "interval"
}
],
mark: "point",
encoding: {
x: { field: "x", type: "quantitative" },
y: { field: "y", type: "quantitative" },
opacity: {
condition: {
param: "brush",
value: 1
},
value: 0.1
}
}
}
Интервал-параметр формирует прямоугольное выделение, которое автоматически обновляет состояние визуализации.
Комбинация параметров позволяет строить сложную логику управления:
{
params: [
{ name: "min", value: 0, bind: { input: "range", min: 0, max: 100 } },
{ name: "max", value: 50, bind: { input: "range", min: 0, max: 100 } }
],
transform: [
{
filter: "datum.value >= param('min') && datum.value <= param('max')"
}
],
mark: "bar",
encoding: {
x: { field: "category", type: "nominal" },
y: { field: "value", type: "quantitative" }
}
}
Параметры формируют логический слой управления поверх данных, не изменяя исходный датасет.
В Vega-Lite параметры являются абстракцией над сигналами Vega.
Ключевые отличия:
Сигналы Vega предоставляют более низкоуровневую модель, где требуется явное управление зависимостями и вычислениями.
param() в сложных выраженияхФункция может применяться в составных логических выражениях:
filter: "datum.a > param('aMin') && datum.b < param('bMax') || param('mode') === 'all'"
Подобные конструкции позволяют реализовать сложные сценарии интерактивного анализа без выхода за пределы декларативного описания.
В составных визуализациях (facet, repeat, concat) параметры могут использоваться как глобальные состояния:
{
params: [
{ name: "metric", value: "sales", bind: { input: "select", options: ["sales", "profit"] } }
],
transform: [
{
calculate: "datum[param('metric')]",
as: "selectedMetric"
}
],
mark: "bar",
encoding: {
y: { field: "selectedMetric", type: "quantitative" }
}
}
Таким образом достигается переключение метрики без изменения структуры визуализации.
Параметры могут влиять не только на данные, но и на конфигурацию визуальных элементов:
scale: {
type: { expr: "param('useLog') ? 'log' : 'linear'" }
}
Такой механизм позволяет строить адаптивные визуальные интерфейсы с минимальной логикой на уровне кода.
param() в архитектуре декларативной визуализацииФункция param() выступает связующим звеном между
статической спецификацией и динамическим состоянием интерфейса. Она
обеспечивает единый способ доступа к интерактивным переменным внутри
выражений, трансформаций и условий отображения.
Через параметризацию достигается разделение:
что позволяет масштабировать сложность визуализаций без перехода к императивной логике.