Skip to content

Программное управление

listeners сообщают, что сделал пользователь; методы инстанса чарта делают то же самое из кода. Это не синтетические события — вызов идёт ровно тем же путём, что и наведение или клик, поэтому листенеры срабатывают, а состояние меняется так же, как от указателя.

ts
const chart = Charts.create(options);

chart.showTooltip({ datumIndex: 12 }); // навести на датум из строки таблицы
chart.clickNode({ datumIndex: 12 }); // nodeClick + выделение, как от клика
chart.setSelection([{ datumIndex: 3 }, { datumIndex: 7 }]);
chart.zoomToCount(30, { anchor: 'end' }); // показать последние 30 точек

Методы

МетодВозвращаетЧто делает
showTooltip(target)booleanтултип и подсветку датума — как наведение на него
hideTooltip()убирает и то, и другое — как уход курсора с области
clickNode(target, opts?)booleannodeClick и изменение выделения, которое даёт клик
getSelection()SelectedNode[]текущее выделение: seriesId, datumIndex, datum
setSelection(targets, opts?)заменяет выделение целиком
clearSelection(opts?)очищает его
isZoomed()booleanокно уже полного домена или нет
zoomTo(window, opts?){ x?: [от, до], y?: [от, до] } — доли домена
zoomToCount(count, opts?)окно на N элементов; anchor: 'start' | 'end'
resetZoom(opts?)возврат к полному домену

target — это { datumIndex, seriesId? }. Без seriesId видимые серии отвечают по порядку: выигрывает первая, у которой есть узел с таким индексом.

Тихие вызовы

Любой вызов, что-то меняющий, по умолчанию уведомляет листенеры. Приложению, которое управляет чартом из собственного состояния, это обычно мешает: листенер вернёт изменение обратно, и они начнут пинг-понг. Передайте { silent: true }:

ts
listeners: {
  selectionChange: ({ items }) => store.select(items.map((item) => item.datum.id)),
}

// применяем состояние обратно к чарту — не входя в листенер снова
store.subscribe((ids) => chart.setSelection(ids.map(toTarget), { silent: true }));

silent гасит и собственные листенеры чарта, и рассылку в группу синхронизации: тихий zoomTo не сдвинет связанные чарты.

Когда возвращается false

showTooltip и clickNode требуют узла, который действительно есть на экране. Они вернут false, если датум вне текущего окна зума, принадлежит скрытой серии или попросту не существует — это стоит проверять, прежде чем считать тултип показанным. Выделение — учёт, а не геометрия, поэтому setSelection принимает любой индекс.

Отрисовка

Вызовы планируют кадр так же, как обновление опций. Дождитесь waitForUpdate(), если следующая строка зависит от того, что кадр уже на экране: скриншот, замер, проверка в тесте.

ts
chart.showTooltip({ datumIndex: 4 });
await chart.waitForUpdate();
const png = chart.getImageDataURL();

Не у всех чартов есть всё

У пирога нет зума, у treemap — тоже. Вызов того, чего у вида чарта нет, — no-op с однократным предупреждением в консоль, а не ошибка: код, общий для нескольких типов чартов, из-за этого не сломается.

Вид чартаТултипКлик и выделениеЗум
декартовы
pie, donut, полярные
treemap, sunburst, flow