Vega-Lite в Markdown: статистические графики текстом

blogtest · 21.08.2026 21:06 #справка #Markdown
Vega-Lite в Markdown: статистические графики текстом

Диаграммы Mermaid у нас давно, но у них слабо со статистикой: гистограммы, регрессии, боксы, хитмапы — не их жанр. Для этого появился новый fence — vega: описываем график декларативным JSON (спека Vega-Lite), а рендерит его браузер. Никаких картинок — только текст, как мы любим.

Как это устроено

```vega
{
  "width": "container",
  "data": {"values": [{"x": 1, "y": 5}]},
  "mark": "bar"
}
```

Что происходит под капотом:

  • фенс кладёт спеку в <script type="application/json"> внутри контейнера;
  • клиентский скрипт лениво грузит vega + vega-lite + vega-embed с CDN — только если на странице есть хоть один график;
  • при переключении светлой/тёмной темы блога график перерисовывается сам;
  • при наведении на график появляется кнопка «Развернуть» — фуллскрин, где интерактивность полностью сохраняется;
  • невалидный JSON не роняет страницу, а показывается красным блоком с исходником.

Столбчатая диаграмма

Цены за 1000 токенов из обзора моделей Yandex Cloud:

Наведите курсор на столбцы — тултипы работают без единой строчки нашего JS.

Гистограмма без кнопки зума

Распределение времён ответа (мс). На этом графике висит класс .zoom-0 — кнопки «Развернуть» у него нет:

.zoom-0 — общий класс отказа от нашего зума: он действует и на картинки, и на mermaid-схемы (можно вешать на обёртку — например, на весь box).

Точечный график с регрессией

Вот это уже чистый seaborn-жанр: облако точек плюс линия регрессии одним трансформом regression:

Зум осей из коробки

Параметр bind: "scales" даёт нативный pan/zoom прямо в статье: тащите мышью — двигается график, крутите колесо — зум, двойной клик — сброс:

В развёрнутом виде (кнопка справа вверху) с ним особенно удобно.

Классы работают как у всех фенсов

attr_list на открывающей строке попадает на контейнер:

```vega {: .h-scroll-narrow}
{"...": "..."}
```

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

Где брать спеки

  • Галерея примеров: vega.github.io/vega-lite/examples — сотни готовых спек от баров до карт и кроссфильтров;
  • Онлайн-редактор: vega.github.io/editor — покрутили, получили JSON, вставили в статью.

Совет

Ставьте "width": "container" — график впишется в колонку статьи, а не уедет за край. Данные можно держать прямо в спеке (values), генерировать (sequence) или подтягивать файлом (data.url — помните про CORS).

Комментарии

Пока нет комментариев.

Войдите, чтобы комментировать.