Параметры vegaEmbed: actions, renderer, theme

Функция vegaEmbed является центральной точкой интеграции спецификаций Vega и Vega-Lite в веб-приложения на JavaScript. Она принимает JSON-описание визуализации и преобразует его в интерактивный график внутри DOM-элемента, управляя рендерингом, стилями и набором встроенных действий пользователя. Конфигурация через параметры actions, renderer и theme определяет поведение интерфейса, производительность и визуальную согласованность графиков.

Вызов vegaEmbed обычно имеет следующую форму:

vegaEmbed('#vis', spec, options)

где:

  • #vis — DOM-элемент или селектор контейнера;
  • spec — спецификация Vega или Vega-Lite;
  • options — объект конфигурации, содержащий параметры рендера и поведения.

Именно options определяет ключевые аспекты взаимодействия с визуализацией, включая:

  • механизм отрисовки (renderer);
  • визуальную тему (theme);
  • панель действий (actions).

Эти параметры не влияют на саму структуру данных или описание графика, но существенно изменяют способ его отображения и пользовательский опыт.


renderer: выбор механизма отрисовки

Параметр renderer определяет технологию, используемую для генерации графической сцены. Vega поддерживает два основных режима: canvas и svg.

Canvas-рендеринг

vegaEmbed('#vis', spec, {
  renderer: 'canvas'
});

Canvas использует HTML5 <canvas> и рисует графику в виде растрового изображения.

Особенности:

  • высокая производительность при больших объемах данных;
  • оптимизация под частые перерисовки;
  • отсутствие DOM-узлов для каждого графического элемента;
  • ограниченные возможности CSS-стилизации отдельных элементов.

Canvas предпочтителен в случаях:

  • более 10–20 тысяч визуальных элементов;
  • динамически обновляемых потоковых данных;
  • сложных анимаций с высокой частотой кадров.

Недостаток заключается в невозможности прямого доступа к отдельным элементам графика через DOM, что ограничивает сложные сценарии кастомизации.


SVG-рендеринг

vegaEmbed('#vis', spec, {
  renderer: 'svg'
});

SVG-режим создает каждый графический элемент как отдельный узел DOM.

Особенности:

  • высокая точность отображения;
  • возможность стилизации через CSS;
  • поддержка событий на уровне элементов;
  • удобство инспекции через DevTools.

SVG используется, когда:

  • требуется интерактивность на уровне отдельных графических примитивов;
  • объем данных сравнительно небольшой;
  • важна визуальная детализация и редактируемость.

Недостаток SVG проявляется при росте количества элементов: DOM становится перегруженным, а производительность падает.


Сравнительная модель выбора

Критерий Canvas SVG
Производительность Высокая Средняя/низкая
Интерактивность Ограниченная Полная
Масштабируемость Очень высокая Ограниченная
Стилизация Через пересчет Через CSS

theme: визуальные темы и системный стиль

Параметр theme управляет внешним видом визуализации, включая цветовые схемы, типографику и базовые стилистические настройки. Vega предоставляет несколько встроенных тем, а также возможность подключения пользовательских.

Использование стандартных тем

vegaEmbed('#vis', spec, {
  theme: 'dark'
});

Наиболее распространенные встроенные темы:

  • default — базовая светлая тема;
  • dark — темная тема с приглушенными цветами;
  • quartz, excel, ggplot2 — стили, имитирующие популярные графические системы.

Каждая тема представляет собой набор переопределений конфигурации Vega, влияющих на:

  • палитру цветов;
  • фон и сетку;
  • стиль осей;
  • шрифты и размеры текста;
  • оформление легенд.

Механизм применения темы

Тема применяется на уровне конфигурации Vega перед компиляцией спецификации. Это означает, что итоговая визуализация уже включает все переопределенные параметры.

Упрощенно процесс выглядит следующим образом:

  1. Загружается базовая спецификация.
  2. Применяется объект theme-конфигурации.
  3. Итоговая спецификация компилируется в Vega runtime.
  4. Выполняется рендеринг через выбранный renderer.

Пользовательские темы

Темы могут быть определены как JavaScript-объекты:

const customTheme = {
  background: '#1e1e1e',
  axis: {
    labelColor: '#cccccc',
    titleColor: '#ffffff',
    gridColor: '#333333'
  },
  style: {
    'guide-label': {
      fontSize: 12
    }
  }
};

vegaEmbed('#vis', spec, {
  theme: customTheme
});

Пользовательские темы позволяют стандартизировать визуальный стиль в рамках одного продукта или дизайн-системы.


Влияние темы на Vega-Lite спецификации

Vega-Lite использует концепцию компиляции в Vega. При этом тема применяется после трансляции, но до рендера. Это обеспечивает:

  • единообразие визуального стиля независимо от уровня абстракции;
  • отсутствие необходимости изменять исходную спецификацию;
  • возможность глобального переключения стиля без переработки графиков.

actions: управление панелью интерактивных действий

Параметр actions отвечает за отображение и поведение встроенного UI-блока действий Vega, который обычно появляется в правом верхнем углу визуализации. Этот блок предоставляет инструменты экспорта и инспекции.

Базовое включение и отключение

vegaEmbed('#vis', spec, {
  actions: true
});
vegaEmbed('#vis', spec, {
  actions: false
});

При actions: false панель полностью скрывается, включая все элементы управления.


Структура actions как объекта

vegaEmbed('#vis', spec, {
  actions: {
    export: true,
    source: false,
    compiled: true,
    editor: true
  }
});

Параметр может быть не только булевым значением, но и объектом, позволяющим тонко управлять функциональностью.


export: экспорт визуализации

actions: {
  export: true
}

Отвечает за возможность сохранения визуализации в различных форматах:

  • PNG (растровое изображение);
  • SVG (векторный формат);
  • PDF (при наличии соответствующих расширений).

Экспорт реализуется через рендеринг текущего состояния сцены и сериализацию графического слоя.


source: доступ к исходной спецификации

actions: {
  source: true
}

Открывает JSON-представление исходной Vega или Vega-Lite спецификации.

Функционально это:

  • инструмент отладки;
  • способ проверки компиляции;
  • механизм анализа структуры визуализации.

При включении создается модальное окно с форматированным JSON.


compiled: просмотр скомпилированной Vega

actions: {
  compiled: true
}

Vega-Lite спецификация перед рендерингом преобразуется в низкоуровневую Vega-схему. Параметр compiled позволяет просматривать этот промежуточный результат.

Это важно для:

  • диагностики ошибок компиляции;
  • анализа трансформаций данных;
  • понимания, как абстрактные конструкции Vega-Lite разворачиваются в Vega.

editor: интеграция с онлайн-редактором

actions: {
  editor: true
}

Добавляет ссылку на открытие спецификации в внешнем редакторе Vega Editor.

Функционально это обеспечивает:

  • перенос визуализации в интерактивную среду разработки;
  • возможность мгновенного редактирования спецификации;
  • тестирование изменений без локальной настройки окружения.

Комбинирование параметров actions

vegaEmbed('#vis', spec, {
  actions: {
    export: true,
    source: true,
    compiled: false,
    editor: false
  }
});

Такое управление позволяет создавать строго контролируемые интерфейсы, где, например, пользователю доступен только экспорт, но скрыты внутренние представления.


Взаимодействие renderer, theme и actions

Хотя параметры renderer, theme и actions относятся к разным уровням системы, их взаимодействие формирует итоговое поведение визуализации.

Renderer и actions

  • SVG обеспечивает более точную интерактивность в сочетании с source и compiled, так как DOM-структура соответствует визуальным элементам.
  • Canvas ограничивает инспекцию элементов, но не влияет на экспорт.

Theme и renderer

  • Theme влияет на цвета и стили независимо от того, используется ли SVG или Canvas.
  • В Canvas изменения темы требуют перерисовки пикселей, в SVG — обновления DOM-атрибутов.

Theme и actions

  • Панель source отражает не тему, а спецификацию до применения визуального слоя.
  • compiled может содержать уже инкорпорированные параметры темы.

Типовые конфигурации vegaEmbed

Высокопроизводительная визуализация больших данных

vegaEmbed('#vis', spec, {
  renderer: 'canvas',
  theme: 'dark',
  actions: false
});

Интерактивная аналитическая панель

vegaEmbed('#vis', spec, {
  renderer: 'svg',
  theme: 'default',
  actions: {
    export: true,
    source: true,
    compiled: true,
    editor: false
  }
});

Встраивание в продукт с ограниченным UI

vegaEmbed('#vis', spec, {
  renderer: 'canvas',
  theme: customTheme,
  actions: {
    export: false,
    source: false,
    compiled: false,
    editor: false
  }
});

Поведение при отсутствии параметров

Если renderer, theme или actions не указаны явно, используются значения по умолчанию:

  • renderer: зависит от окружения, чаще canvas;
  • theme: default;
  • actions: true.

Это обеспечивает предсказуемое поведение без дополнительной конфигурации, но ограничивает контроль над визуальным и интерактивным слоем.