В Chart.js визуализация данных строится вокруг строгой модели соответствия между набором данных (datasets) и осями координат. Основная идея заключается в том, что каждый элемент данных должен быть корректно интерпретирован системой масштабов (scales) и отображён в соответствии с типом оси: категориальной, линейной, временной или пользовательской.
Chart.js поддерживает несколько форматов представления данных, и
способ их привязки к осям зависит от структуры массива
data.
data: {
labels: ['Янв', 'Фев', 'Мар', 'Апр'],
datasets: [{
label: 'Продажи',
data: [12, 19, 3, 5]
}]
}
В этом случае:
labels автоматически становятся значениями оси X
(категориальная ось)data привязывается к оси Ylabels[i] ↔︎ data[i]Такой подход называется индексной привязкой и используется по умолчанию.
Для более гибкой работы Chart.js позволяет задавать точки как объекты:
data: [{
x: 'Янв',
y: 12
}, {
x: 'Фев',
y: 19
}]
В этом случае:
x напрямую привязывается к оси Xy напрямую привязывается к оси Ylabels больше не обязательныТакой формат используется при работе с:
Используется по умолчанию для строковых значений.
scales: {
x: {
type: 'category'
}
}
Особенности:
scales: {
x: {
type: 'linear'
}
}
Особенности:
Пример:
data: [{
x: 0,
y: 10
}, {
x: 5,
y: 15
}]
scales: {
x: {
type: 'time'
}
}
Формат данных:
data: [{
x: '2024-01-01',
y: 10
}, {
x: '2024-01-02',
y: 15
}]
Особенности:
При использовании нескольких осей Chart.js позволяет явно связывать dataset с конкретной осью.
data: {
datasets: [{
label: 'Температура',
data: [10, 20, 15],
yAxisID: 'y'
}, {
label: 'Влажность',
data: [30, 40, 35],
yAxisID: 'y1'
}]
}
Конфигурация осей:
scales: {
y: {
type: 'linear',
position: 'left'
},
y1: {
type: 'linear',
position: 'right'
}
}
Ключевые моменты:
yAxisID связывает dataset с конкретной осью YChart.js автоматически интерпретирует структуры данных, но это поведение можно отключить:
datasets: [{
parsing: false,
data: [{
time: 1,
value: 10
}]
}]
В этом случае требуется явное указание ключей:
parsing: {
xAxisKey: 'time',
yAxisKey: 'value'
}
Особенности:
При работе с объектами данных можно использовать вложенные значения:
data: [{
point: {
time: 1,
value: 10
}
}]
И конфигурация:
parsing: {
xAxisKey: 'point.time',
yAxisKey: 'point.value'
}
Поддерживается:
Несколько datasets могут использовать одну и ту же ось X:
datasets: [{
label: 'A',
data: [1, 2, 3]
}, {
label: 'B',
data: [3, 2, 1]
}]
Механизм привязки:
labelsChart.js позволяет менять направление базовой оси:
indexAxis: 'y'
В этом случае:
Пример использования:
type: 'bar',
indexAxis: 'y'
Перед отрисовкой Chart.js выполняет нормализацию:
При несовпадении структуры:
nullДля управления отображением используется настройка диапазонов:
scales: {
y: {
min: 0,
max: 100
}
}
Или динамическая настройка:
suggestedMin: 0,
suggestedMax: 100
Поведение:
min/max жёстко фиксируют диапазонsuggestedMin/suggestedMax влияют только на
авторасчётТип оси определяет допустимую форму данных:
| Тип оси | Формат данных | Особенности |
|---|---|---|
| category | массив значений | индексное соответствие |
| linear | {x, y} числа | числовая интерполяция |
| time | {x: дата, y} | временная шкала |
| logarithmic | {x, y} > 0 | логарифмическое масштабирование |
Chart.js обрабатывает пропуски следующим образом:
null — разрыв линииundefined — игнорирование точкиПример:
data: [10, null, 20]
Результат:
При сложной визуализации каждый dataset может иметь:
Конфигурация:
datasets: [{
yAxisID: 'y'
}, {
yAxisID: 'y1'
}]
Это позволяет объединять: