Механизм вторичных осей в Chart.js используется для отображения нескольких наборов данных с разными единицами измерения или различными диапазонами значений на одном графике. Основная идея заключается в том, что каждая группа данных может быть привязана к собственной оси Y (или реже X), что позволяет избежать искажения визуального восприятия при значительном различии масштабов.
Система осей в Chart.js построена вокруг объекта scales,
который описывает все доступные координатные оси диаграммы. В базовой
конфигурации присутствует одна ось Y (y) и одна ось X
(x), однако структура позволяет расширять их
количество.
Каждая ось описывается как отдельный объект:
Пример базовой структуры:
scales: {
x: {
type: 'category'
},
y: {
type: 'linear'
}
}
Вторичная ось создаётся путём добавления дополнительной шкалы, чаще
всего ещё одной оси Y, например y1. Каждая серия данных
связывается с конкретной осью через параметр yAxisID.
y — основная осьy1 — дополнительная осьyAxisID — привязка dataset к осиconst config = {
type: 'line',
data: {
labels: ['Янв', 'Фев', 'Мар', 'Апр'],
datasets: [
{
label: 'Температура',
data: [5, 7, 10, 15],
yAxisID: 'y'
},
{
label: 'Осадки',
data: [50, 40, 60, 80],
yAxisID: 'y1'
}
]
},
options: {
scales: {
y: {
type: 'linear',
position: 'left'
},
y1: {
type: 'linear',
position: 'right',
grid: {
drawOnChartArea: false
}
}
}
}
};
Каждый набор данных должен явно указывать ось, иначе он будет отображён на основной шкале.
{
label: 'Продажи',
data: [120, 150, 180],
yAxisID: 'y'
}
{
label: 'Прибыль',
data: [20, 30, 25],
yAxisID: 'y1'
}
Оси могут быть расположены слева и справа:
left — левая сторонаright — правая сторонаscales: {
y: {
position: 'left'
},
y1: {
position: 'right'
}
}
Размещение на противоположных сторонах повышает читаемость при разнородных метриках.
При использовании двух осей Y сетка может перегружать визуализацию. Часто применяется отключение вертикальных линий для второй оси:
y1: {
grid: {
drawOnChartArea: false
}
}
Это позволяет оставить одну систему координат, избегая визуального дублирования линий.
Вторичные оси применяются в случаях:
Каждая ось имеет собственный диапазон min и
max:
y1: {
min: 0,
max: 1000
}
Каждая ось может иметь независимое форматирование через
ticks:
y1: {
ticks: {
callback: function(value) {
return value + ' $';
}
}
}
Типовые сценарии:
Каждая ось может иметь подпись:
y: {
title: {
display: true,
text: 'Температура (°C)'
}
},
y1: {
title: {
display: true,
text: 'Осадки (мм)'
}
}
Подписи критичны при различии метрик, так как визуальная нагрузка возрастает.
Dual axis часто используется вместе с комбинированными графиками:
Пример:
datasets: [
{
type: 'bar',
yAxisID: 'y',
data: [10, 20, 30]
},
{
type: 'line',
yAxisID: 'y1',
data: [100, 200, 150]
}
]
Если диапазоны осей совпадают, dual axis теряет смысл и вводит визуальное дублирование.
yAxisIDБез явной привязки dataset распределяется на основную ось, что ломает логику сравнения.
Слишком большое количество осей приводит к:
Tooltip в Chart.js агрегирует данные по точке X и показывает значения всех dataset.
Для различения осей используется:
Легенда остаётся общей для всех осей. Однако возможно логическое разделение через:
При необходимости можно синхронизировать диапазоны осей для визуального сопоставления:
y: {
min: 0,
max: 100
},
y1: {
min: 0,
max: 100
}
Это используется в аналитических интерфейсах, где важны относительные изменения.
Dual axis не влияет существенно на производительность, однако:
При большом объёме данных важнее оптимизация самих наборов, чем осей.
При работе с временными рядами одна ось может быть time,
другая — linear:
scales: {
x: {
type: 'time'
},
y: {
type: 'linear'
},
y1: {
type: 'linear'
}
}
Это позволяет комбинировать абсолютные значения и производные показатели.
При использовании dual axis критично соблюдение:
Настройка borderColor, backgroundColor и
pointStyle часто становится частью общей системы визуальной
дифференциации.
При скрытии серии через легенду или API Chart.js ось остаётся активной. Это может приводить к:
Для контроля используется программное управление состоянием dataset.
Dual axis применяется в аналитических панелях:
Каждый сценарий требует строгого разделения единиц измерения и диапазонов.