I am displaying one doughnut chart on a web page with chart.js with some text in the center of the doughnut. The problems is when adding multiple dounghnut charts on the same page. The center text is overlapped on all charts.
Result looks like this doughnut chart with overlapping text
Here is a fiddle : https://jsfiddle.net/jaklar/ng1y18yo/1/
HTML code:
`
<table>
<tr>
<td><canvas id="myChart1" width="150" height="150"></canvas></td>
<td><canvas id="myChart2" width="150" height="150"></canvas></td>
</tr>
<table>
`
javascript
'
var data = {
labels: [
"Red",
"Blue"
],
datasets: [
{
data: [100, 100],
backgroundColor: [
"#FF6384",
"#36A2EB"
],
hoverBackgroundColor: [
"#FF6384",
"#36A2EB"
]
}]
};
var promisedDeliveryChart = new Chart(document.getElementById('myChart1'), {
type: 'doughnut',
data: data,
options: {
responsive: true,
cutoutPercentage: 75,
legend: {
display: false
}
}
});
Chart.pluginService.register({
beforeDraw: function(chart) {
var width = chart.chart.width,
height = chart.chart.height,
ctx = chart.chart.ctx;
ctx.restore();
var fontSize = (height / 114).toFixed(2);
ctx.font = fontSize + "em sans-serif";
ctx.textBaseline = "middle";
var text = "100%",
textX = Math.round((width - ctx.measureText(text).width) / 2),
textY = height / 2;
ctx.fillText(text, textX, textY);
ctx.save();
}
});
var data = {
labels: [
"Red",
"Blue"
],
datasets: [
{
data: [300, 0],
backgroundColor: [
"#FF6384",
"#36A2EB"
],
hoverBackgroundColor: [
"#FF6384",
"#36A2EB"
]
}]
};
var promisedDeliveryChart = new Chart(document.getElementById('myChart2'), {
type: 'doughnut',
data: data,
options: {
responsive: true,
cutoutPercentage: 75,
legend: {
display: false
}
}
});
Chart.pluginService.register({
beforeDraw: function(chart) {
var width = chart.chart.width,
height = chart.chart.height,
ctx = chart.chart.ctx;
ctx.restore();
var fontSize = (height / 114).toFixed(2);
ctx.font = fontSize + "em sans-serif";
ctx.textBaseline = "middle";
var text = "9%",
textX = Math.round((width - ctx.measureText(text).width) / 2),
textY = height / 2;
ctx.fillText(text, textX, textY);
ctx.save();
}
});
'