Я новичок в ChartJS и пытаюсь построить гистограмму. Этот график должен содержать следующую информацию:
labels = ['D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'D10']
data = [1,2,3,4,5,6,7,8,9,10]
backgroundColor = ['red','red','red','blue','blue','blue','green','green','black','black']
До этого момента мне удавалось построить график так, как я ожидал. Но я хотел бы показать легенду примерно так:
И это не уникальная запись, которую я получаю:
Как я мог это сделать?
Вот что мне удалось сделать:
<div class = "ontainer">
<canvas id = "myChart"></canvas>
</div>
<script>
const ctx = document.getElementById('myChart');
const label_legend = ['A','B','C','D']
const data = {
labels: ['D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'D10'],
datasets: [{
label: 'My First Dataset',
data: [1,2,3,4,5,6,7,8,9,10],
backgroundColor: ['red','red','red','blue','blue','blue','green','green','black','black'],
}]
};
const config = {
type: 'bar',
data: data,
options: {
scales: {
y: {
beginAtZero: true
}
}
},
};
new Chart(document.getElementById('myChart'), config);
</script>
Не следует объединять данные из разных категорий в одну категорию.
Набор данных должен быть в этом формате:
[
{
label: 'Red',
data: [1, 2, 3, null, null, null, null, null, null, null],
backgroundColor: 'red',
},
{
label: 'Blue',
data: [null, null, null, 4, 5, 6, null, null, null, null],
backgroundColor: 'blue',
},
{
label: 'Green',
data: [null, null, null, null, null, null, 7, 8, null, null],
backgroundColor: 'green',
},
{
label: 'Black',
data: [null, null, null, null, null, null, null, null, 9, 10],
backgroundColor: 'black',
},
]
Преобразуйте входные данные в формат с помощью:
const inputs = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const inputColors = [
'red',
'red',
'red',
'blue',
'blue',
'blue',
'green',
'green',
'black',
'black',
];
const colors = new Set(inputColors);
let groupedDataset = [];
for (let color of colors) {
groupedDataset.push({
label: color.charAt(0).toUpperCase() + color.slice(1),
data: inputs.map((x, i) => (inputColors[i] === color ? x : null)),
backgroundColor: color,
});
}
const data = {
labels: ['D1', 'D2', 'D3', 'D4', 'D5', 'D6', 'D7', 'D8', 'D9', 'D10'],
datasets: groupedDataset,
};
const config = {
type: 'bar',
data: data,
options: {
scales: {
y: {
beginAtZero: true,
},
},
skipNull: true,
},
};
Если данные не относятся к категории, укажите значение с помощью null
.
Чтобы предотвратить отображение нерелевантной панели в столбце (например, полоса с синим, зеленым и черным цветом не должна отображаться в D1, D2 и D3), настройте skipNull: true
в options
.
Большое спасибо за понятное объяснение.