Легенда в библиотеке Chart.js отображает список наборов данных
(datasets) и позволяет визуально идентифицировать элементы
графика. По умолчанию легенда располагается сверху (top),
однако система конфигурации поддерживает несколько вариантов
размещения:
topbottomleftrightchartAreaНастройка выполняется через объект
options.plugins.legend.position.
Базовый пример:
const config = {
type: 'bar',
data: data,
options: {
plugins: {
legend: {
position: 'bottom'
}
}
}
};
topПозиция top используется по умолчанию. Легенда
отображается над областью построения графика.
const config = {
type: 'line',
data: {
labels: ['Январь', 'Февраль', 'Март'],
datasets: [
{
label: 'Продажи',
data: [120, 190, 150],
borderColor: 'blue'
},
{
label: 'Расходы',
data: [80, 100, 90],
borderColor: 'red'
}
]
},
options: {
plugins: {
legend: {
position: 'top'
}
}
}
};
top┌───────────────────────┐
│ Легенда │
├───────────────────────┤
│ │
│ Область │
│ графика │
│ │
└───────────────────────┘
bottomПозиция bottom переносит легенду под график.
const config = {
type: 'pie',
data: data,
options: {
plugins: {
legend: {
position: 'bottom'
}
}
}
};
bottomПозиция удобна в следующих случаях:
pie, doughnut);┌───────────────────────┐
│ │
│ График │
│ │
├───────────────────────┤
│ Легенда │
└───────────────────────┘
options: {
responsive: true,
plugins: {
legend: {
position: 'bottom'
}
}
}
leftПозиция left переносит легенду в левую часть
контейнера.
const config = {
type: 'radar',
data: data,
options: {
plugins: {
legend: {
position: 'left'
}
}
}
};
При размещении слева элементы легенды выстраиваются вертикально.
┌────────────┬──────────┐
│ │ │
│ │ │
│ Легенда │ График │
│ │ │
│ │ │
└────────────┴──────────┘
rightПозиция right аналогична left, но
располагает легенду справа.
const config = {
type: 'bar',
data: data,
options: {
plugins: {
legend: {
position: 'right'
}
}
}
};
┌───────────────┬───────┐
│ │ │
│ График │ │
│ │Legend │
│ │ │
└───────────────┴───────┘
chartAreaЗначение chartArea размещает легенду непосредственно
внутри области построения графика.
const config = {
type: 'line',
data: data,
options: {
plugins: {
legend: {
position: 'chartArea'
}
}
}
};
chartAreaВ отличие от остальных вариантов:
┌───────────────────────┐
│ │
│ График │
│ │
│ Легенда │
│ │
└───────────────────────┘
Позиция chartArea используется значительно реже,
поскольку:
| Позиция | Направление | Экономия места | Подходит для |
|---|---|---|---|
top |
горизонтальное | по ширине | стандартных графиков |
bottom |
горизонтальное | по ширине | pie/doughnut |
left |
вертикальное | по высоте | длинных подписей |
right |
вертикальное | по высоте | dashboard-интерфейсов |
chartArea |
свободное | максимальная | компактных схем |
Позицию легенды можно менять во время работы приложения.
chart.options.plugins.legend.position = 'left';
chart.update();
Переключение на другую сторону:
chart.options.plugins.legend.position = 'bottom';
chart.update();
alignПоложение легенды определяет сторону размещения, а параметр
align — внутреннее выравнивание.
options: {
plugins: {
legend: {
position: 'top',
align: 'start'
}
}
}
alignstartcenterendtop + start┌───────────────────────┐
│ Legend │
├───────────────────────┤
│ График │
└───────────────────────┘
top + center┌───────────────────────┐
│ Legend │
├───────────────────────┤
│ График │
└───────────────────────┘
top + end┌───────────────────────┐
│ Legend │
├───────────────────────┤
│ График │
└───────────────────────┘
При включённой адаптивности (responsive: true) позиция
легенды влияет на перерасчёт размеров графика.
options: {
responsive: true,
plugins: {
legend: {
position: 'right'
}
}
}
При большом количестве наборов данных легенда может занимать значительную часть пространства.
datasets: [
{ label: 'Dataset 1' },
{ label: 'Dataset 2' },
{ label: 'Dataset 3' },
{ label: 'Dataset 4' },
{ label: 'Dataset 5' },
]
legend: {
position: 'right'
}
Вертикальное расположение часто эффективнее для длинных списков.
Легенду можно полностью скрыть:
options: {
plugins: {
legend: {
display: false
}
}
}
После повторного включения позиция снова начинает применяться:
legend: {
display: true,
position: 'bottom'
}
Обычно используются:
position: 'top'
или
position: 'bottom'
Часто применяются:
position: 'right'
или
position: 'bottom'
Удобны вертикальные варианты:
position: 'left'
const config = {
type: 'line',
data: {
labels: ['Пн', 'Вт', 'Ср', 'Чт', 'Пт'],
datasets: [
{
label: 'Доход',
data: [120, 150, 180, 170, 210],
borderColor: 'green',
backgroundColor: 'rgba(0,255,0,0.2)'
},
{
label: 'Расход',
data: [90, 110, 130, 120, 160],
borderColor: 'red',
backgroundColor: 'rgba(255,0,0,0.2)'
}
]
},
options: {
responsive: true,
plugins: {
legend: {
position: 'right',
align: 'center',
labels: {
boxWidth: 20,
padding: 15
}
}
}
}
};
new Chart(ctx, config);
Неправильно:
position: 'center'
Правильно:
position: 'top'
position: 'left'
На маленьких экранах график может стать слишком узким.
chartArea без учёта перекрытияposition: 'chartArea'
Легенда может закрывать линии, столбцы и подписи.
topbottomleftrightchartArea