Система взаимодействия в Chart.js определяет, какие элементы графика считаются «активными» при наведении курсора, касании или клике. От выбранного режима зависит:
tooltip);Основные режимы задаются через параметр mode в
секциях:
options: {
interaction: {
mode: 'nearest'
}
}
или отдельно для подсказок:
options: {
plugins: {
tooltip: {
mode: 'index'
}
}
}
Наиболее используемые режимы:
indexdatasetpointnearestПри движении курсора Chart.js:
Например:
interaction: {
mode: 'index',
intersect: false
}
Здесь:
mode определяет стратегию поиска элементов;intersect указывает, требуется ли точное попадание
курсором в точку.indexРежим index активирует все элементы с одинаковым
индексом по оси данных.
Если на графике несколько наборов (datasets), то при
наведении на конкретную категорию будут выделены значения всех наборов
данных для этой позиции.
const config = {
type: 'line',
data: {
labels: ['Январь', 'Февраль', 'Март', 'Апрель'],
datasets: [
{
label: 'Продажи',
data: [10, 20, 15, 30],
borderColor: 'blue'
},
{
label: 'Расходы',
data: [8, 12, 18, 25],
borderColor: 'red'
}
]
},
options: {
interaction: {
mode: 'index',
intersect: false
}
}
};
При наведении на область Март:
| Dataset | Значение |
|---|---|
| Продажи | 15 |
| Расходы | 18 |
Tooltip покажет обе строки одновременно.
Главное преимущество — удобное сопоставление нескольких наборов данных по одной категории.
Особенно полезно для:
Обычно используется:
intersect: false
Это позволяет активировать значения при нахождении курсора рядом с вертикальной областью индекса.
На линейных графиках режим выглядит наиболее естественно:
interaction: {
mode: 'index',
axis: 'x'
}
Chart.js ищет совпадение по оси X.
plugins: {
tooltip: {
mode: 'index',
intersect: false
}
}
В этом случае hover и tooltip могут работать независимо.
При наведении:
В stacked-графиках index особенно полезен:
scales: {
x: {
stacked: true
},
y: {
stacked: true
}
}
Tooltip показывает полный состав стека.
datasetРежим dataset активирует весь набор данных целиком.
При наведении на любую точку серии:
interaction: {
mode: 'dataset'
}
Допустим, имеется два графика:
При наведении на линию Продажи:
Chart.js рассматривает dataset как единую сущность.
Это особенно заметно при:
elements: {
line: {
borderWidth: 2
}
},
hover: {
mode: 'dataset'
}
Режим полезен при анализе:
dataset хорошо сочетается с radar chart:
type: 'radar'
При наведении подсвечивается вся фигура.
indexАктивирует:
datasetАктивирует:
plugins: {
tooltip: {
mode: 'dataset'
}
}
Tooltip становится ориентированным на серию данных.
pointРежим point активирует только конкретную точку, над
которой находится курсор.
Никакие соседние элементы не учитываются.
interaction: {
mode: 'point'
}
Активным становится исключительно элемент под курсором.
Если курсор находится между точками:
point требует пересечения с элементом:
interaction: {
mode: 'point',
intersect: true
}
Режим полезен:
Для точечных диаграмм режим считается одним из основных.
type: 'scatter'
Каждая точка анализируется независимо.
Tooltip содержит информацию только об одной точке:
plugins: {
tooltip: {
mode: 'point'
}
}
Исключаются случайные совпадения.
Нет группировки данных.
Пользователь всегда понимает, какая точка активна.
На маленьких элементах взаимодействие может быть неудобным.
Показывается только один элемент.
nearestnearest ищет ближайший элемент к курсору независимо от
индекса и dataset.
Это наиболее гибкий и часто используемый режим.
interaction: {
mode: 'nearest'
}
Chart.js:
Может быть выбрана любая ближайшая точка.
Особенно полезен при:
interaction: {
mode: 'nearest',
intersect: true
}
Требуется точное попадание.
interaction: {
mode: 'nearest',
intersect: false
}
Chart.js выбирает ближайший элемент даже без пересечения.
Параметр axis ограничивает поиск.
interaction: {
mode: 'nearest',
axis: 'x'
}
interaction: {
mode: 'nearest',
axis: 'y'
}
interaction: {
mode: 'nearest',
axis: 'xy'
}
type: 'bubble'
Поскольку элементы расположены хаотично, nearest
обеспечивает наиболее естественное взаимодействие.
| Режим | Что активируется |
|---|---|
| index | Все datasets одного индекса |
| dataset | Один dataset полностью |
| point | Одна точка |
| nearest | Ближайший элемент |
| Режим | Tooltip |
|---|---|
| index | Список значений |
| dataset | Серия данных |
| point | Одна запись |
| nearest | Ближайшая запись |
| Режим | Удобство |
|---|---|
| index | Отлично для сравнения |
| dataset | Хорошо для анализа тренда |
| point | Хорошо для точности |
| nearest | Универсальный вариант |
Chart.js позволяет задавать разные режимы:
options: {
interaction: {
mode: 'nearest'
},
hover: {
mode: 'dataset'
}
}
Управляет:
Управляет:
interaction: {
mode: 'index',
intersect: false
}
Классическая конфигурация для аналитических графиков.
interaction: {
mode: 'nearest',
intersect: true
}
Точное взаимодействие с ближайшей точкой.
interaction: {
mode: 'point',
intersect: true
}
Максимально строгая активация.
interaction: {
mode: 'dataset',
intersect: false
}
Удобная подсветка серий.
Режим можно задавать отдельно:
plugins: {
tooltip: {
mode: 'index'
}
}
interaction: {
mode: 'nearest'
},
plugins: {
tooltip: {
mode: 'index'
}
}
В таком случае:
Наиболее популярны:
indexnearestЧаще используется:
indexНаиболее подходит:
pointnearestУдобен:
datasetПрактически всегда:
nearestНа небольших графиках разница незаметна, однако при тысячах точек режимы работают по-разному.
pointnearestindexdatasetПоскольку требуется обработка групп элементов.
mode: 'point',
intersect: false
Поведение может казаться непредсказуемым.
mode: 'index'
Для scatter chart это редко удобно.
На плотных графиках ближайшая точка может постоянно меняться.
mode: 'index',
intersect: false
mode: 'nearest'
или
mode: 'point'
mode: 'dataset'
mode: 'nearest',
intersect: false
const config = {
type: 'line',
data: {
labels: ['Янв', 'Фев', 'Мар', 'Апр'],
datasets: [
{
label: 'Доход',
data: [10, 20, 30, 40],
borderColor: 'blue'
},
{
label: 'Расход',
data: [8, 18, 22, 35],
borderColor: 'red'
}
]
},
options: {
interaction: {
mode: 'index',
intersect: false,
axis: 'x'
},
hover: {
mode: 'dataset'
},
plugins: {
tooltip: {
mode: 'index'
}
}
}
};