Решение сильно зависит от формата ваших базовых данных. Например, он может быть определен следующим образом:
const testResults = [
{ category: 'Algebra', totalQuestions: 10, correclyAnswered: 7 },
{ category: 'Calculus', totalQuestions: 12, correclyAnswered: 9 },
{ category: 'Analysis', totalQuestions: 8, correclyAnswered: 5 },
{ category: 'Geometry ', totalQuestions: 10, correclyAnswered: 10 },
{ category: 'Combinatorics ', totalQuestions: 9, correclyAnswered: 5 }
];
В этом случае диаграмма data
может быть сгенерирована следующим образом:
const data = {
labels: testResults.map(o => o.category),
datasets: [
{
label: 'Test Results',
backgroundColor: 'rgba(0, 255, 0, 0.2)',
borderColor: 'rgba(0, 255, 0)',
borderWidth: 1,
data: testResults.map(o => (100 / o.totalQuestions * o.correclyAnswered))
}
]
};
Тогда вам также придется определите диаграмму options
, чтобы убедиться, что всплывающие подсказки и метки правильно отформатированы, а ось X заполнена от 0 до 100%.
const options = {
tooltips: {
callbacks: {
label: (tooltipItem, data) => {
var label = data.datasets[tooltipItem.datasetIndex].label || '';
return label + ': ' + tooltipItem.xLabel.toFixed(0) + '%';
}
}
},
scales: {
xAxes: [{
ticks: {
min: 0,
max: 100,
stepSize: 10,
callback: value => value + '%'
}
}]
}
}
Сама диаграмма будет определена следующим образом:
<HorizontalBar
data = { data }
options = { options }
/>
Пожалуйста, посмотрите это StackBlitz .