admin管理员组文章数量:1135090
I'm trying to show some data using a doughnut chart from Chart.js2.
My current chart looks like this:
My desired output must show another attribute, which is the percentage, and looks like this:
I've read the documentation, but I can't cope with this because it's very general and I'm new to JavaScript.
My code for the first chart is the following:
const renderCashCurrencyPie = (cashAnalysisBalances) => {
if (cashAnalysisBalances) {
const currenciesName = cashAnalysisBalances
.map(curName => curName.currency);
const availableCash = cashAnalysisBalances
.map(avCash => avCash.availableCash);
let currenciesCounter = 0;
for (let i = 0; i < currenciesName.length; i += 1) {
if (currenciesName[i] !== currenciesName[i + 1]) {
currenciesCounter += 1;
}
}
const currenciesData = {
labels: currenciesName,
datasets: [{
data: availableCash,
backgroundColor: [
'#129CFF',
'#0C6DB3',
'#FF6384',
'#00FFFF'
],
hoverBackgroundColor: [
'#FF6384',
'#36A2EB',
'#FFCE56',
'#00FFFF'
]
}]
};
I'm trying to show some data using a doughnut chart from Chart.js2.
My current chart looks like this:
My desired output must show another attribute, which is the percentage, and looks like this:
I've read the documentation, but I can't cope with this because it's very general and I'm new to JavaScript.
My code for the first chart is the following:
const renderCashCurrencyPie = (cashAnalysisBalances) => {
if (cashAnalysisBalances) {
const currenciesName = cashAnalysisBalances
.map(curName => curName.currency);
const availableCash = cashAnalysisBalances
.map(avCash => avCash.availableCash);
let currenciesCounter = 0;
for (let i = 0; i < currenciesName.length; i += 1) {
if (currenciesName[i] !== currenciesName[i + 1]) {
currenciesCounter += 1;
}
}
const currenciesData = {
labels: currenciesName,
datasets: [{
data: availableCash,
backgroundColor: [
'#129CFF',
'#0C6DB3',
'#FF6384',
'#00FFFF'
],
hoverBackgroundColor: [
'#FF6384',
'#36A2EB',
'#FFCE56',
'#00FFFF'
]
}]
};
Share
Improve this question
edited Aug 10, 2020 at 19:06
Tot Zam
8,74611 gold badges54 silver badges79 bronze badges
asked Apr 25, 2017 at 7:44
RamAlxRamAlx
7,32424 gold badges64 silver badges110 bronze badges
0
8 Answers
Reset to default 162You can customize the tooltips using the chart options tooltip configuration section, as explained here: http://www.chartjs.org/docs/latest/configuration/tooltip.html#tooltip-configuration
As shown in the example code below, you can change things like color, sizing and styles. Check out the documentation linked above for a full list of configurable options.
If you want to add the percentage to the tooltip display, you can use tooltip callbacks. The documentation has a list of all the possible customizable callback fields.
In the below example, I set the "title" to show the label name, "label" to show the value, and added the percentage to "afterLabel".
var myChart = new Chart(ctx, {
type: 'doughnut',
data: data,
options: {
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 percent = Math.round((dataset['data'][tooltipItem['index']] / dataset["_meta"][0]['total']) * 100)
return '(' + percent + '%)';
}
},
backgroundColor: '#FFF',
titleFontSize: 16,
titleFontColor: '#0066ff',
bodyFontColor: '#000',
bodyFontSize: 14,
displayColors: false
}
}
});
Working JSFiddle: https://jsfiddle.net/m7s43hrs/
As per @Tot Zam's answer, but using arrow functions for brevity:
options: {
tooltips: {
callbacks: {
title: (items, data) => data.datasets[items[0].datasetIndex].data[items[0].index].myProperty1,
label: (item, data) => data.datasets[item.datasetIndex].data[item.index].myProperty2
}
}
}
For those who are using latest Chart.js version v3.5.1, below is the code you can add to customize tooltip.
Add below plugins object to chart options
plugins: {
tooltip: {
enabled: true,
usePointStyle: true,
callbacks: {
// To change title in tooltip
title: (data) => { return data[0].parsed.x }
// To change label in tooltip
label: (data) => {
return data.parsed.y === 2 ? "Good" : "Critical"
}
},
},
},
Anybody looking out for solution in 2021 to set the label as title of tooltip, below code snippet works. use console.dir(tooltipItems) to see the contents of tooltipItems.
callbacks: {
title: function (tooltipItems) {
return tooltipItems[0].formattedValue;
}
}
Thanks to Tuhin for his answer. It helped me to figure out how to change the tooltip title using a callback function.
I'm quite new to javascript so it wasn't obvious to me from the Chart.js 3.4.1 docs exactly how to work with the tooltip object. By using console.log(tooltipItems), as suggested, I was able to get the info I required.
I ended up with a config object with the following callback set in options.plugins. I wanted a shortened date string to be displayed as the title of the tooltip. Using toDateString() did the trick.
Here's how I set up my callback:
options: {
...
plugins: {
tooltip: {
callbacks: {
title: tooltipItems => {
title = tooltipItems[0].parsed.x
if (title !== null) {
console.dir(title)
title = new Date(title).toDateString()
}
return title
},
},
},
},
},
Hi i found a practical solution to format the text of tooltip
const label = (context) => {
let lbl = context.label+' '+ context.formattedValue+' ' + '%'
return lbl
}
const chartOptions = {
plugins:{
tooltip: {
callbacks: {
label: label,
},
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
Here is an example an Doughnut chart with a tooltip (Chart.js 4.4.0) :
let chart = new Chart(el.getContext('2d'), {
type: 'doughnut',
data: {
datasets: [
{
data: this.doughnutData
}
]
},
options: {
plugins: {
tooltip: {
callbacks: {
label: function(context) {
var label = context.dataset.data[context.dataIndex]['label'];
var value = context.formattedValue;
return label + ' : ' + value + ' %';
}
}
}
},
responsive: true,
// This doughnut chart will respond to mousemove or click (show label-percentage).
events: ['click','mousemove']
}
});
It works fine, hope it helps :)
Tooltip Doc : https://www.chartjs.org/docs/latest/configuration/tooltip.html#tooltip-item-context.
public lineChartConnexionOptions: ChartOptions = { responsive: true, scales: { xAxes: [{}], yAxes: [{ ticks: { beginAtZero: true, min: 0, suggestedMax: 12 } }] },
tooltips: {
enabled: true,
mode: 'single',
callbacks: {
label: function (tooltipItems, data) {
let fg = parseInt(tooltipItems.value)
if(fg > 6){
return " En charge "
}else{
if(fg> 0){
return " La borne est En ligne 6 herbeat/heure "
}else{
return " La borne est Hors ligne "
}
}
}
}},
plugins: {
datalabels: {
anchor: 'end',
align: 'end',
}
}
};
本文标签: javascriptHow to customize the tooltip of a Chartjs 20 Doughnut ChartStack Overflow
版权声明:本文标题:javascript - How to customize the tooltip of a Chart.js 2.0 Doughnut Chart? - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1736917841a1956355.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论