В библиотеке Chart.js столбчатые диаграммы реализуются через тип
bar, а ориентация графика управляется параметром
indexAxis. Именно он позволяет превращать стандартную
вертикальную диаграмму в горизонтальную без изменения структуры
данных.
В классическом варианте столбцы располагаются по оси X, а категории — по оси Y. В горизонтальном варианте всё меняется местами: категории переходят на ось X, а значения вытягиваются вдоль оси Y.
Ключевой механизм:
indexAxis: 'x' — стандартная вертикальная диаграмма
(значение по Y)indexAxis: 'y' — горизонтальная диаграмма (значение по
X визуально превращается в длину полосы)Фактически меняется не тип графика, а направление индексации категорий.
const config = {
type: 'bar',
data: {
labels: ['Январь', 'Февраль', 'Март', 'Апрель'],
datasets: [{
label: 'Продажи',
data: [120, 190, 300, 250],
backgroundColor: 'rgba(54, 162, 235, 0.6)'
}]
},
options: {
indexAxis: 'y'
}
};
new Chart(document.getElementById('chart'), config);
В этом примере:
labels становятся вертикальным списком категорийdata задаёт длину горизонтальных полосindexAxis: 'y' разворачивает диаграммуПри включении горизонтальной ориентации происходит переназначение ролей осей:
Это важно учитывать при настройке:
Горизонтальные диаграммы часто требуют явного контроля шкалы:
options: {
indexAxis: 'y',
scales: {
x: {
beginAtZero: true,
ticks: {
precision: 0
}
}
}
}
Здесь ось x отвечает за числовые значения, поэтому
именно её обычно настраивают.
Горизонтальные бары могут выглядеть перегружено при большом количестве категорий. Управление плотностью осуществляется через:
barThicknessmaxBarThicknesscategoryPercentagebarPercentageПример:
datasets: [{
data: [80, 120, 60],
barThickness: 20
}]
Чем меньше толщина, тем больше категорий можно уместить без прокрутки.
Горизонтальная ориентация часто используется для ранжирования. Данные обычно сортируются до передачи в график:
const labels = ['A', 'B', 'C', 'D'];
const values = [40, 90, 20, 70];
// сортировка по убыванию
const sorted = labels
.map((label, i) => ({ label, value: values[i] }))
.sort((a, b) => b.value - a.value);
const config = {
type: 'bar',
data: {
labels: sorted.map(i => i.label),
datasets: [{
data: sorted.map(i => i.value)
}]
},
options: {
indexAxis: 'y'
}
};
Такой подход превращает диаграмму в удобный инструмент рейтингов.
График становится более читаемым при правильной настройке визуала:
datasets: [{
data: [10, 40, 25],
backgroundColor: [
'rgba(255, 99, 132, 0.6)',
'rgba(54, 162, 235, 0.6)',
'rgba(75, 192, 192, 0.6)'
],
borderColor: 'rgba(0, 0, 0, 0.1)',
borderWidth: 1,
borderRadius: 6
}]
Особенно важны:
borderRadius для сглаживания концов полосДля горизонтальных диаграмм часто включают значения прямо на концах полос:
options: {
indexAxis: 'y',
plugins: {
tooltip: {
enabled: true
}
}
}
Дополнительно часто используется плагин
chartjs-plugin-datalabels, позволяющий выводить числа прямо
на графике.
Горизонтальные диаграммы отличаются восприятием сетки:
scales: {
x: {
grid: {
display: true
}
},
y: {
grid: {
display: false
}
}
}
Такой подход снижает визуальный шум.
Горизонтальный формат особенно полезен при длинных названиях:
Настройки:
scales: {
y: {
ticks: {
autoSkip: false,
font: {
size: 12
}
}
}
}
Анимации в Chart.js сохраняются, но направление их визуально меняется:
options: {
indexAxis: 'y',
animation: {
duration: 800,
easing: 'easeOutQuart'
}
}
Полосы «вырастают» слева направо, что соответствует восприятию шкалы.
Горизонтальные диаграммы поддерживают stacking:
options: {
indexAxis: 'y',
scales: {
x: {
stacked: true
},
y: {
stacked: true
}
}
}
Это позволяет:
Горизонтальные bar chart используются там, где важна читаемость категорий и сравнение:
Их основное преимущество — визуальная ясность при большом количестве категорий и длинных текстовых метках.