В Chart.js основная единица визуализации данных — объект
dataset, входящий в массив datasets внутри
конфигурации графика. Именно он определяет, какие значения отображаются,
как они интерпретируются и каким образом визуально представлены на
графике.
Общая структура набора данных выглядит следующим образом:
const config = {
type: 'line',
data: {
labels: ['Янв', 'Фев', 'Мар', 'Апр'],
datasets: [
{
label: 'Продажи',
data: [10, 20, 15, 30]
}
]
}
};
Каждый объект внутри datasets отвечает за отдельную
линию, столбцы, сектор или другой элемент графика в зависимости от типа
диаграммы.
Поле label задаёт текстовое имя набора данных. Оно
используется:
{
label: 'Доход за месяц'
}
data — ключевое поле, содержащее значения, отображаемые
на графике. Формат зависит от типа диаграммы:
Линейные, столбчатые и radar-графики:
data: [12, 19, 3, 5, 2, 3]
Scatter (точечные графики):
data: [
{ x: 10, y: 20 },
{ x: 15, y: 10 }
]
Bubble chart:
data: [
{ x: 10, y: 20, r: 8 }
]
Значение r определяет радиус точки.
Определяет заливку элементов:
backgroundColor: 'rgba(54, 162, 235, 0.5)'
Также поддерживается массив цветов:
backgroundColor: ['red', 'blue', 'green']
Задаёт цвет границ элементов:
borderColor: '#36A2EB'
Часто используется вместе с borderWidth.
Толщина линии или границы:
borderWidth: 2
Параметры состояния наведения:
hoverBackgroundColor: 'rgba(255, 99, 132, 0.7)',
hoverBorderColor: '#ff6384'
Определяет сглаженность линии:
y = f(x)
Чем выше значение, тем более плавной становится кривая:
tension: 0.4
0 — ломаная линия1 — максимальное сглаживаниеУправляет заливкой области под линией:
fill: true
Возможные значения:
true — заливка включенаfalse — отключенаПозволяет строить ступенчатую линию:
stepped: true
Используется в отображении дискретных изменений.
Размер точки:
pointRadius: 4
Форма точки:
circlerecttrianglestarpointStyle: 'triangle'
Цвет заполнения точки:
pointBackgroundColor: '#ff6384'
Фиксированная ширина столбца:
barThickness: 20
Максимально допустимая ширина:
maxBarThickness: 40
Управляют распределением пространства:
categoryPercentage: 0.8,
barPercentage: 0.9
Определяет, с какой стороны отключать границу:
borderSkipped: 'bottom'
Варианты:
startendmiddlebottomleftrightСкрывает dataset при инициализации:
hidden: true
Определяет порядок отрисовки:
order: 2
Чем больше значение, тем выше слой отображения.
Используется для стековых графиков:
stack: 'group1'
Позволяет объединять несколько dataset в одну группу накопления.
Используются при совпадении с labels:
labels: ['A', 'B', 'C'],
data: [5, 10, 15]
Каждое значение соответствует индексу метки.
Используется при временных или координатных данных:
data: [
{ x: '2024-01-01', y: 10 },
{ x: '2024-01-02', y: 20 }
]
Chart.js позволяет расширять объекты:
data: [
{ x: 1, y: 10, customInfo: 'A' }
]
Дополнительные поля игнорируются визуализацией, но доступны в callbacks.
Управляет разбором данных:
parsing: {
xAxisKey: 'time',
yAxisKey: 'value'
}
Используется при работе с объектными массивами.
Хотя tooltip задаётся вне dataset, сами данные dataset активно используются для кастомизации отображения значений через callbacks.
При использовании нескольких наборов данных структура расширяется:
datasets: [
{
label: '2023',
data: [10, 20, 30]
},
{
label: '2024',
data: [15, 25, 35]
}
]
Каждый dataset:
tension, fill,
steppedbarPercentage,
categoryPercentagebackgroundColor как массив{x, y}rChart.js реагирует на изменение массива data:
Пример обновления:
chart.data.datasets[0].data.push(40);
chart.update();
Внутри Chart.js dataset преобразуется в набор элементов, каждый из которых содержит:
Это позволяет разделять:
Каждый dataset получает контекст, используемый для динамических функций:
backgroundColor: (context) => {
return context.raw > 10 ? 'green' : 'red';
}
Контекст содержит: