В Chart.js диапазон значений осей задаётся через конфигурацию
масштабов (scales). Для числовых шкал ключевыми параметрами выступают
минимум (min), максимум (max) и
шаг делений (stepSize). Эти настройки определяют, какие
значения попадут в область видимости графика, и как именно будут
формироваться деления (ticks) на осях.
Работа с диапазоном напрямую влияет на читаемость графиков, точность
визуализации и поведение масштабирования при динамических данных.
Типы шкал и применимость
ограничений
Настройки min, max и stepSize применимы не ко всем типам шкал
одинаково.
Линейная шкала (linear)
Наиболее предсказуемый вариант. Поддерживает:
- фиксированный минимум и максимум
- равномерный шаг делений
- математически корректное масштабирование
Используется для числовых значений: продажи, температура, скорость,
метрики.
Логарифмическая шкала
(logarithmic)
- min и max применимы
- stepSize не используется напрямую
- деления вычисляются логарифмически
Категориальная шкала
(category)
- min/max не задаются как числовые границы
- stepSize не применяется
- ось строится по индексам категорий
Временная шкала (time)
- min/max задаются датами
- шаг регулируется через time.unit и time.stepSize
Минимальное и
максимальное значение оси
Явное задание границ
В линейной шкале можно зафиксировать диапазон:
const config = {
type: 'line',
data: {
labels: ['A', 'B', 'C', 'D'],
datasets: [{
label: 'Продажи',
data: [12, 19, 7, 25]
}]
},
options: {
scales: {
y: {
min: 0,
max: 30
}
}
}
};
Здесь ось Y всегда будет отображать значения от 0 до 30 независимо от
данных.
Автоматический диапазон
Если min и max не заданы, Chart.js вычисляет границы автоматически на
основе набора данных.
Особенности автоматического режима:
- добавляется небольшой отступ сверху и снизу
- округление границ до “красивых” значений
- учёт всех dataset’ов на одной оси
suggestedMin и suggestedMax
Параметры suggestedMin и suggestedMax
влияют на автоматический расчёт, но не фиксируют границы жёстко.
scales: {
y: {
suggestedMin: 0,
suggestedMax: 100
}
}
Логика работы:
- если данные выходят за пределы suggestedMin/max — ось
расширяется
- если данные внутри диапазона — используется предложенный
диапазон
- используется как мягкая настройка для “ожидаемой области
значений”
beginAtZero
Частный случай управления минимумом:
scales: {
y: {
beginAtZero: true
}
}
Поведение:
- если минимальное значение данных > 0 — ось всё равно начнётся с
0
- удобно для диаграмм, где важна визуальная база сравнения
Деления оси и шаг (stepSize)
Базовое управление шагом
stepSize задаёт фиксированный интервал между
делениями:
scales: {
y: {
min: 0,
max: 100,
ticks: {
stepSize: 20
}
}
}
Результат:
- деления: 0, 20, 40, 60, 80, 100
- равномерная сетка
- предсказуемая визуализация
Влияние stepSize на
автоматический расчёт
Если задан stepSize, Chart.js:
- игнорирует попытки автоматически подобрать “красивые” интервалы
- жёстко фиксирует шаг
- может расширить max для кратности шагу
Пример:
- max = 95
- stepSize = 20 → фактическая шкала может стать 0–100
Ограничения stepSize
stepSize корректно работает только при:
- linear шкале
- положительных или равномерных числах
Не применяется:
- category шкала
- logarithmic шкала
- сложные time unit настройки
Автоматический шаг и
поведение ticks
Если stepSize не задан, Chart.js использует алгоритм подбора
делений.
Основные факторы:
- диапазон значений
- размер графика
- maxTicksLimit
- precision округления
maxTicksLimit
Ограничивает максимальное количество делений:
scales: {
y: {
ticks: {
maxTicksLimit: 6
}
}
}
Поведение:
- Chart.js старается не превышать лимит
- шаг увеличивается автоматически при необходимости
- улучшается читаемость на маленьких графиках
precision
Позволяет управлять округлением:
ticks: {
precision: 0
}
Значения:
- 0 — только целые числа
- 1 — один знак после запятой
- и т.д.
Комбинирование min, max и
stepSize
Жёсткая фиксация шкалы
scales: {
y: {
min: 0,
max: 50,
ticks: {
stepSize: 10
}
}
}
Поведение:
- ось строго 0–50
- шаг фиксирован
- визуальная сетка стабильна при любых данных
Частичная фиксация
scales: {
y: {
min: 0,
ticks: {
stepSize: 5
}
}
}
Поведение:
- максимум определяется автоматически
- минимум фиксирован
- шаг сохраняется
Полностью динамическая шкала
scales: {
y: {
ticks: {
maxTicksLimit: 8
}
}
}
Поведение:
- min/max вычисляются автоматически
- шаг адаптивный
- деления оптимизируются под размер графика
Границы и поведение
при нескольких dataset
При наличии нескольких наборов данных на одной оси:
- min/max вычисляются по всему объединённому набору
- stepSize применяется ко всей оси целиком
- переполнение одного dataset влияет на всю шкалу
Пример:
datasets: [
{ data: [10, 20, 30] },
{ data: [5, 200] }
]
→ ось будет расширена до значения 200
Grace (запас диапазона)
Дополнительный механизм расширения области:
scales: {
y: {
grace: '10%'
}
}
Поведение:
- добавляет отступ сверху и снизу
- не меняет реальные min/max данных
- улучшает визуальное восприятие пиков
Допустимые значения:
- проценты (
'10%')
- числа (
10)
Влияние stacked графиков
Для stacked диаграмм:
- min обычно остаётся 0
- max вычисляется по сумме значений
- stepSize применяется к итоговой суммарной шкале
Это важно для stacked bar:
- отдельные значения не влияют напрямую на верхнюю границу
- учитывается сумма всех слоёв
Поведение при
отрицательных значениях
Если данные содержат отрицательные числа:
- min может стать отрицательным автоматически
- stepSize сохраняет равномерность
- ось пересекает ноль
Пример:
data: [-10, 5, 20]
→ шкала: примерно -10 до 20 (с округлением)
Практика управления
читаемостью
При работе с диапазонами важны не только вычисления, но и визуальная
логика:
- крупный stepSize снижает детализацию, но повышает читаемость
- мелкий stepSize увеличивает точность, но перегружает ось
- фиксированный min помогает выравнивать графики между собой
Поведение при resize и
responsive режиме
Chart.js пересчитывает ticks при:
- изменении размера контейнера
- смене ориентации
- обновлении данных
При этом:
- stepSize может пересчитываться (если не зафиксирован)
- min/max остаются стабильными, если заданы явно
- auto-scale адаптируется под новую геометрию