Русский
Графики в заметках
Блок datachart в заметке превращается в интерактивный график на опубликованной странице. Никакого отдельного редактора — вы пишете график так же, как любой другой блок кода в Obsidian.
Как это работает
Добавьте в заметку огороженный блок с идентификатором языка datachart. Внутри — один JSON-объект с двумя ключами:
data— откуда брать данныеconfig— объект настроек Apache ECharts, который задаёт тип и внешний вид графика
{
"data": { "source": "inline", "rows": [ ... ] },
"config": {
"xAxis": { "type": "category" },
"yAxis": { "type": "value" },
"series": [{ "type": "bar", "encode": { "x": "month", "y": "sales" } }]
}
}
trip2g читает объект data, загружает или считывает строки и автоматически подставляет их в config.dataset.source. Никакого плейсхолдера для данных писать не нужно — они просто появляются. Виджет ECharts на странице рисует график из результата.
Один блок = один график. Разместите в заметке столько блоков, сколько нужно — они отрисуются по порядку.
Живые примеры
Графики ниже отрисованы из блоков datachart прямо на этой странице — каждый это несколько строк markdown с данными внутри.
Источники данных
Поле data.source указывает, откуда брать строки. Доступны четыре варианта.
inline — данные прямо в блоке
Самый простой случай. Все строки находятся внутри блока. Подходит для небольших статичных графиков, которые не меняются.
Никаких загрузок не происходит. Строки — часть самой заметки.
frontmatter — данные из файла хранилища
Данные живут в файле .csv или .json внутри вашего хранилища Obsidian. Ссылку на файл вы указываете во frontmatter заметки, а не внутри блока кода.
Почему во frontmatter? Потому что Obsidian умеет работать с [[ссылками]] во frontmatter как с настоящими связями — автодополнение, граф, подсветка в редакторе. Ссылка внутри блока кода ничего из этого не получит.
Добавьте ссылку как свойство frontmatter, затем укажите имя этого свойства в блоке:
---
chart_sales: "[[sales-demo-ru.datachart.csv]]"
---
График ниже — живой: эта страница объявляет chart_sales в своём frontmatter и
хранит рядом небольшой sales-demo-ru.datachart.csv:
Когда читатель открывает страницу, браузер загружает файл с данными напрямую — trip2g преобразует вики-ссылку в URL ресурса и вставляет его в HTML страницы. Файл раздаётся с теми же правами доступа, что и сама заметка: свободная заметка отдаёт файл публично, платная требует подписку.
Поддерживаются оба формата. JSON-файл должен содержать массив объектов-строк. CSV-файл должен иметь строку заголовков; виджет разбирает её автоматически и приводит числовые колонки к числовому типу.
url — данные из внешнего HTTP-эндпойнта
Живые данные с любого HTTP-JSON эндпойнта, которым вы управляете. trip2g обращается к URL на стороне сервера, кеширует результат и встраивает его в отрисованный HTML. URL эндпойнта и тело запроса никогда не попадают в исходный код страницы.
График ниже живой и готов к копипасту: он указывает на крошечный демо-эндпойнт
на этом же сайте. Скопируйте блок в своё хранилище — и он нарисует тот же график,
ваш trip2g обратится к тому же публичному URL.
Эндпойнт должен возвращать плоский JSON-массив объектов-строк — ровно это и
возвращает https://trip2g.com/en/user/sales_demo_api:
[
{ "day": "2026-06-01", "revenue": 1234 },
{ "day": "2026-06-02", "revenue": 1891 }
]
Нужно передать запрос? Добавьте body — и trip2g отправит его POST-ом как JSON
вместо обычного GET. Это пример синтаксиса, укажите свой эндпойнт:
{
"data": {
"source": "url",
"url": "https://api.example.com/query",
"body": "{\"sql\":\"SELECT day, revenue FROM stats ORDER BY day\"}"
},
"config": {
"xAxis": { "type": "category" },
"yAxis": { "type": "value" },
"series": [{ "type": "line", "encode": { "x": "day", "y": "revenue" } }]
}
}
Когда грузятся данные. trip2g запрашивает URL на сервере, когда заметку публикуют или пересобирают (во время загрузки заметки) — не когда читатель открывает страницу. Читатель всегда получает готовый HTML. Пока идёт первая загрузка, график показывает индикатор; как только данные приходят, страница перерисовывается с ними. Дальше кешированный результат переиспользуется до следующей публикации заметки.
Заголовки авторизации (скоро). Эндпойнты с заголовком авторизации — ключ или токен — будут работать через зашифрованные серверные секреты, так что данные доступа не попадут в браузер.
internal — запрос к данным вашего сайта (скоро)
data.source = "internal" с полем sql позволит строить графики по собственному опубликованному контенту — заметки по статусу, публикации за период и подобное. Этот источник данных пока недоступен; на живом сайте график показывает индикатор загрузки.
Свойства frontmatter
Два необязательных свойства управляют поведением графиков на уровне заметки.
chart_ttl (частота обновления — скоро)
Желаемый интервал обновления данных url/internal в формате длительности Go: 30m, 1h, 24h. Обновление по расписанию пока не работает — сейчас данные грузятся один раз при публикации и обновляются только при повторной публикации заметки.
chart_ttl: 1h
charts: custom
Отключает встроенную отрисовку графиков. Блоки всё равно разбираются и доступны кастомному шаблону через ctx.Charts(), чтобы вы могли расположить их в нужных местах макета.
charts: custom
Это продвинутая настройка для кастомных шаблонов. Большинству авторов она не нужна.
Типы графиков
Тип графика задаётся в config.series[].type. Три самых распространённых:
| Тип | series[].type |
Примечание |
|---|---|---|
| Столбчатый | "bar" |
encode: { x: "колонка", y: "колонка" } для привязки данных |
| Линейный | "line" |
Та же схема encode, что и у bar |
| Круговой | "pie" |
encode: { itemName: "колонка", value: "колонка" } |
Доступны все типы графиков ECharts — полный список в справочнике ECharts. Объект config передаётся в ECharts напрямую, поэтому всё, что работает в ECharts, работает и здесь.
Пример: столбчатый, линейный и круговой в одной заметке
Заметка ниже использует три типа из разных источников данных:
---
free: true
title: Обзор трафика
chart_ttl: 1h
---