В библиотеке Chart.js структура данных строится вокруг единого
объекта data, который определяет содержимое графика и
связывает числовые значения с визуальными элементами диаграммы. Основу
этого объекта составляют два ключевых компонента: labels и
datasets. Их корректная организация определяет поведение
осей, отображение серий данных и возможность масштабирования
визуализации на несколько наборов информации.
Базовый формат объекта данных выглядит следующим образом:
const data = {
labels: [],
datasets: []
};
Chart.js интерпретирует data в зависимости от типа
графика, но логика связи labels и datasets
остаётся фундаментальной.
labels представляет собой массив значений, которые
используются как категории или подписи точек данных. В зависимости от
типа диаграммы они могут выступать как:
Пример:
const data = {
labels: ['Январь', 'Февраль', 'Март', 'Апрель'],
datasets: []
};
Каждое значение в labels соответствует позиции элемента
в массиве data внутри каждого dataset.
const data = {
labels: ['A', 'B', 'C'],
datasets: [
{
label: 'Продажи',
data: [10, 20, 30]
}
]
};
Соответствие:
| labels | data |
|---|---|
| A | 10 |
| B | 20 |
| C | 30 |
Синхронизация по индексу Chart.js не сопоставляет значения по ключам, только по индексам массива.
Необязательность labels в scatter charts В
точечных графиках (scatter) labels могут отсутствовать, так
как используются координаты x и y.
Гибкость типов данных labels могут быть:
datasets — массив объектов, каждый из которых описывает
отдельный набор данных, визуализируемый на одном графике. Это может
быть:
datasets: [
{ ... },
{ ... }
]
Минимальный dataset:
{
label: 'Набор данных',
data: [10, 20, 30]
}
Имя серии данных, отображаемое в легенде.
label: 'Продажи 2026'
Массив значений, соответствующих labels.
data: [5, 10, 15, 20]
Chart.js связывает данные по следующему принципу:
i в labels соответствует индексу i
в data каждого datasetПример с несколькими наборами:
const data = {
labels: ['Янв', 'Фев', 'Мар'],
datasets: [
{
label: '2024',
data: [10, 20, 30]
},
{
label: '2025',
data: [15, 25, 35]
}
]
};
Визуально:
| Месяц | 2024 | 2025 |
|---|---|---|
| Янв | 10 | 15 |
| Фев | 20 | 25 |
| Мар | 30 | 35 |
Каждый dataset может иметь собственный стиль отображения. Это делает Chart.js мощным инструментом для сравнения данных.
{
label: 'Продажи',
data: [10, 20, 30],
borderColor: 'blue',
backgroundColor: 'lightblue'
}
Используется при синхронизации с labels:
data: [1, 2, 3, 4]
Для графиков с координатной системой:
data: [
{ x: 1, y: 10 },
{ x: 2, y: 20 },
{ x: 3, y: 30 }
]
В этом случае:
Допускается использование null:
data: [10, null, 30]
Значение null означает разрыв линии или отсутствие
точки.
При различной длине массивов Chart.js обрабатывает данные следующим образом:
undefinedПример:
labels: ['A', 'B'],
data: [10, 20, 30]
Результат:
30 не будет отображеноChart.js допускает смешивание datasets с разными типами визуализации:
datasets: [
{
type: 'bar',
data: [10, 20, 30]
},
{
type: 'line',
data: [15, 25, 35]
}
]
labels при этом остаются общим контекстом категорий.
При использовании временной оси labels могут заменяться объектами времени:
labels: [
'2026-01-01',
'2026-01-02',
'2026-01-03'
]
или полностью передаваться через dataset:
data: [
{ x: '2026-01-01', y: 10 },
{ x: '2026-01-02', y: 20 }
]
Dataset без data:
{
label: 'Пустой набор',
data: []
}
Последствия:
Порядок datasets в массиве влияет на визуальную отрисовку:
datasets: [
{ label: 'A', data: [1, 2, 3] },
{ label: 'B', data: [2, 3, 4] }
]
datasets и labels часто изменяются во время выполнения:
chart.data.labels.push('Май');
chart.data.datasets[0].data.push(40);
chart.update();
Особенности:
Chart.js различает:
null — разрыв линииundefined — пропускdata: [10, null, 30]
Результат:
Типичный сценарий:
datasets: [
{ label: 'Доход', data: [100, 200, 300] },
{ label: 'Расход', data: [80, 150, 250] },
{ label: 'Прибыль', data: [20, 50, 50] }
]
Такое представление позволяет:
Корректная структура данных опирается на три принципа:
Типичные проблемы: