Столбчатая диаграмма в Chart.js представляет собой один из базовых и наиболее часто используемых типов визуализации данных. Она предназначена для сравнения дискретных значений между собой, где каждая колонка отражает величину определённого элемента набора данных. Визуальная простота этого типа диаграмм делает его универсальным инструментом для аналитики, отчетности и пользовательских интерфейсов.
Столбчатая диаграмма строится на двух ключевых осях:
Каждое значение из набора данных преобразуется в вертикальный столбец, высота которого пропорциональна числу.
В Chart.js базовая конфигурация bar-диаграммы выглядит следующим образом:
const config = {
type: 'bar',
data: {
labels: ['Январь', 'Февраль', 'Март', 'Апрель'],
datasets: [{
label: 'Продажи',
data: [12, 19, 7, 15],
backgroundColor: 'rgba(54, 162, 235, 0.5)',
borderColor: 'rgba(54, 162, 235, 1)',
borderWidth: 1
}]
}
};
В этой структуре:
labels задают категории по оси Xdatasets определяют один или несколько наборов
данныхdata содержит числовые значенияChart.js поддерживает отображение нескольких наборов данных одновременно. Это позволяет сравнивать несколько метрик по одной и той же шкале категорий.
const config = {
type: 'bar',
data: {
labels: ['Январь', 'Февраль', 'Март'],
datasets: [
{
label: '2024',
data: [10, 20, 30],
backgroundColor: 'rgba(255, 99, 132, 0.5)'
},
{
label: '2025',
data: [15, 25, 35],
backgroundColor: 'rgba(54, 162, 235, 0.5)'
}
]
}
};
В этом случае столбцы группируются по категориям, образуя сравнительные блоки.
Каждый столбец может быть стилизован независимо через параметры dataset:
backgroundColor — цвет заполненияborderColor — цвет границыborderWidth — толщина обводкиborderRadius — скругление угловbarPercentage — ширина столбца относительно доступного
пространстваcategoryPercentage — плотность группировки
категорийПример настройки:
datasets: [{
label: 'Посещения',
data: [5, 10, 8],
backgroundColor: 'rgba(75, 192, 192, 0.6)',
borderColor: '#4bc0c0',
borderWidth: 2,
borderRadius: 6,
barPercentage: 0.7,
categoryPercentage: 0.8
}]
Изменение ориентации достигается параметром indexAxis.
При значении 'y' диаграмма становится горизонтальной.
const config = {
type: 'bar',
data: {
labels: ['A', 'B', 'C'],
datasets: [{
label: 'Значения',
data: [30, 50, 20],
backgroundColor: 'rgba(153, 102, 255, 0.5)'
}]
},
options: {
indexAxis: 'y'
}
};
Горизонтальная ориентация особенно полезна при длинных текстовых метках или большом количестве категорий.
Система осей в Chart.js позволяет гибко управлять отображением значений.
options: {
scales: {
y: {
beginAtZero: true,
ticks: {
stepSize: 10
}
}
}
}
y: {
min: 0,
max: 100
}
ticks: {
callback: function(value) {
return value + ' шт.';
}
}
Stacked bar charts позволяют складывать значения нескольких наборов данных друг над другом.
const config = {
type: 'bar',
data: {
labels: ['Q1', 'Q2', 'Q3'],
datasets: [
{
label: 'Продукт A',
data: [10, 20, 30],
backgroundColor: 'rgba(255, 99, 132, 0.5)'
},
{
label: 'Продукт B',
data: [15, 25, 35],
backgroundColor: 'rgba(54, 162, 235, 0.5)'
}
]
},
options: {
scales: {
x: { stacked: true },
y: { stacked: true }
}
}
};
Стекирование позволяет анализировать вклад каждой категории в общий результат.
По умолчанию столбчатые диаграммы обладают встроенной анимацией появления. Её можно настраивать:
options: {
animation: {
duration: 1000,
easing: 'easeOutQuart'
}
}
Интерактивные возможности включают:
Пример обработки клика:
options: {
onClick: (event, elements) => {
if (elements.length > 0) {
const index = elements[0].index;
console.log('Выбран индекс:', index);
}
}
}
Параметры, влияющие на плотность отображения:
barThickness — фиксированная ширина столбцаmaxBarThickness — максимальная ширинаminBarLength — минимальная длина столбцаdatasets: [{
data: [10, 20, 30],
barThickness: 30
}]
Эти настройки полезны при адаптивной верстке и плотных наборах данных.
Chart.js корректно отображает:
0 — как отсутствующий по высоте столбецnull — как пропуск значенияundefined — игнорируется в расчётахПример:
data: [10, null, 25, 0, 40]
Пропуски визуально создают разрывы, что может быть использовано для обозначения отсутствующих данных.
Цвета могут задаваться как статически, так и динамически:
backgroundColor: (context) => {
const value = context.raw;
return value > 20 ? 'green' : 'red';
}
Это позволяет создавать условную визуализацию, где цвет отражает состояние данных.
При работе с большим количеством категорий важно учитывать оптимизацию:
Рекомендуется избегать избыточного количества элементов, так как каждая колонка увеличивает нагрузку на рендеринг Canvas.
Chart.js поддерживает систему плагинов, расширяющих функциональность диаграмм:
Пример кастомного тултипа:
options: {
plugins: {
tooltip: {
callbacks: {
label: function(context) {
return `Значение: ${context.raw}`;
}
}
}
}
}
Существует два основных режима отображения:
Переключение осуществляется через настройки scales.
Группировка полезна для сравнений, стекирование — для анализа структуры.
Порядок datasets влияет на визуальное наложение:
datasets: [
{ label: 'A', data: [...], order: 2 },
{ label: 'B', data: [...], order: 1 }
]
Меньшее значение order отображается поверх других
элементов.
Диаграммы автоматически подстраиваются под размер контейнера. Однако при необходимости можно управлять поведением:
Это важно при интеграции в сложные интерфейсы и dashboards.