В Chart.js координатные оси определяются через систему scales, которая управляет отображением данных на графике. Оси X и Y не являются отдельными сущностями в классическом смысле — они конфигурируются как масштабируемые шкалы с набором параметров, влияющих на разметку, форматирование значений, поведение сетки и связь с наборами данных.
Оси задаются внутри объекта конфигурации графика:
const config = {
type: 'line',
data: {
labels: ['Янв', 'Фев', 'Мар', 'Апр'],
datasets: [{
label: 'Продажи',
data: [10, 20, 15, 30]
}]
},
options: {
scales: {
x: {},
y: {}
}
}
};
Ключевой момент заключается в том, что x и
y — это именованные шкалы, каждая из которых может быть
настроена независимо.
Chart.js поддерживает несколько типов scales, и выбор типа определяет поведение оси.
Используется по умолчанию для оси X в линейных и столбчатых графиках:
x: {
type: 'category'
}
Особенности:
labelsИспользуется чаще для оси Y:
y: {
type: 'linear'
}
Особенности:
x: {
type: 'time'
}
Особенности:
y: {
type: 'logarithmic'
}
Особенности:
Жёстко задают границы оси:
y: {
min: 0,
max: 100
}
Используются, когда необходимо зафиксировать диапазон отображения.
y: {
beginAtZero: true
}
Принудительно устанавливает начало оси Y с нуля. Особенно важно для корректной визуальной интерпретации столбчатых графиков.
Альтернатива жёстким границам:
y: {
suggestedMin: 0,
suggestedMax: 100
}
Chart.js может расширить диапазон при необходимости, сохраняя гибкость масштабирования.
Ось можно перемещать:
y: {
position: 'left'
}
Для X:
x: {
position: 'bottom'
}
Допустимые значения:
topbottomleftrightТики управляют отображаемыми значениями на осях.
y: {
ticks: {
stepSize: 10
}
}
Фиксированный шаг между значениями.
x: {
ticks: {
maxTicksLimit: 5
}
}
Ограничивает количество отображаемых меток.
y: {
ticks: {
callback: function(value) {
return value + ' ₽';
}
}
}
Позволяет преобразовывать отображаемые значения без изменения данных.
Сетка тесно связана с осями и определяет визуальную структуру графика.
x: {
grid: {
display: true
}
}
Основные параметры:
display — включение/выключение сеткиcolor — цвет линийlineWidth — толщинаdrawBorder — отображение границы осиy: {
title: {
display: true,
text: 'Доход'
}
}
Используется для пояснения измеряемой величины.
Chart.js позволяет создавать несколько вертикальных осей, каждая из которых может быть привязана к своему dataset.
const config = {
data: {
datasets: [
{
label: 'Продажи',
data: [10, 20, 30],
yAxisID: 'y'
},
{
label: 'Прибыль',
data: [5, 15, 25],
yAxisID: 'y1'
}
]
},
options: {
scales: {
y: {
type: 'linear',
position: 'left'
},
y1: {
type: 'linear',
position: 'right',
grid: {
drawOnChartArea: false
}
}
}
}
};
Ключевой принцип — связывание данных через yAxisID.
x: {
offset: true
}
Смещает категории, улучшая визуальное выравнивание столбцов.
x: {
bounds: 'ticks'
}
Определяет, как ось привязывается к тикам или данным.
y: {
grace: '10%'
}
Добавляет отступ к диапазону, предотвращая «прилипание» графика к границам.
y: {
reverse: true
}
Переворачивает направление оси, что может использоваться для специфических визуализаций.
scales: {
x: {
stacked: true
},
y: {
stacked: true
}
}
Используется для накопительных графиков, где значения суммируются.
Если ось X категориальная, можно управлять её содержимым через labels:
data: {
labels: ['Q1', 'Q2', 'Q3', 'Q4']
}
Для более сложных случаев используется парсинг объектов:
data: {
datasets: [{
data: [
{x: '2024-01-01', y: 10},
{x: '2024-01-02', y: 20}
]
}]
}
В этом случае ось X должна быть временной или линейной в зависимости от формата.
Каждый dataset может явно указывать, к каким осям он привязан:
{
data: [1, 2, 3],
xAxisID: 'x',
yAxisID: 'y'
}
Это становится критически важным при сложных дашбордах и мультиграфиках.
Если значения выходят за пределы шкалы:
suggestedMin/Max Chart.js автоматически расширяет
диапазонmin/max значения обрезаются логически, но не
визуально фильтруютсяgrace добавляется дополнительное пространствоБазовая конфигурация осей в Chart.js строится вокруг трёх уровней управления:
Именно комбинация этих параметров определяет читаемость графика, точность визуального представления и масштабируемость при увеличении объёма данных.