早些时候,我使用的是2.7.2版本的ChartJS,现在我更新到4.4.1,所以在我的图表中,我正在创建自定义的工具提示和自定义的图例文本,但版本更新后,两者都不工作
以下是2.7.2版本的截图:
DonutChart with LegendText and Tooltip
我想要像这样的图例文本和工具提示,但现在使用4.4.1,无法像这样显示
下面是我的代码:`new Chart(document.getElementById('donutChart'),{ type:'doughnut',
data: {
labels: ['Red', 'Blue', 'Green', 'Teal', 'Yellow'],
datasets: [{
data: [123, 321, 213, 111, 222],
backgroundColor: ['Red', 'Blue', 'Green', 'Teal', 'Yellow'],
hoverOffset: 4
}]
},
options: {
plugins: {
datalabels: {
color: 'white',
font: {
weight: 'bold'
},
},
},
tooltips: {
callbacks: {
title: function(tooltipItem, data) {
return data['labels'][tooltipItem[0]['index']];
},
label: function(tooltipItem, data) {
return data['datasets'][0]['data'][tooltipItem['index']];
},
afterLabel: function(tooltipItem, data) {
var dataset = data['datasets'][0];
var total = dataset.data.reduce((a, b) => a + b, 0);
var percent = Math.round((dataset['data'][tooltipItem['index']] / total) * 100);
return '(' + percent + '%)';
}
},
backgroundColor: '#FFF',
titleFontSize: 14,
titleFontColor: 'black',
bodyFontColor: '#000',
bodyFontSize: 14,
displayColors: false
},
maintainAspectRatio: false,
legend: { position: 'bottom' },
},
plugins: [{
afterLayout: function(chart) {
let total = chart.data.datasets[0].data.reduce((a, b) => {
return a + b;
});
chart.legend.legendItems.forEach(
(label) => {
let value = chart.data.datasets[0].data[label.index];
label.text = value + ' | ' + label.text + ' | ' + (value / total * 100).toFixed(0) + '%';
return label.text;
}
)
}
}],
字符集
});`
在调试过程中,我可以观察到label.text值是正确的,但它们没有按预期显示。
1条答案
按热度按时间7tofc5zh1#
你可以这样做。
个字符
你会注意到我对你的原始代码做了一些修改。
我已经在
datasets
中添加了originalLabels
属性。这是必要的,因为afterLayout正在更改标签,并将更改传输到工具提示。 这样,我保留了最初设置为标签的内容,以后可以在工具提示中使用它。 第二个变化是
tooltip(注意你的代码中的单数和复数)被移到了
options.plugins`中,正如@kikon在对你的问题的评论中所建议的那样。