var drawItemsValuesPlugin = {
afterDraw: function(chartInstance) {
var ctx = chartInstance.chart.ctx;
ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, 'normal', Chart.defaults.global.defaultFontFamily);
ctx.textAlign = 'center';
ctx.textBaseline = 'bottom';
ctx.strokeStyle = 'black';
ctx.font = "bold 11pt Arial";
ctx.lineWidth = 0.3;
chartInstance.data.datasets.forEach(function(dataset) {
for (var i = 0; i < dataset.data.length; i++) {
var model = dataset._meta[Object.keys(dataset._meta)[0]].data[i]._model,
total = dataset._meta[Object.keys(dataset._meta)[0]].total,
mid_radius = model.innerRadius + (2.4 * model.outerRadius - model.innerRadius) / 2,
start_angle = model.startAngle,
end_angle = model.endAngle,
mid_angle = start_angle + (end_angle - start_angle) / 2;
var mid_radius2 = 0.92 * (model.innerRadius + (2.4 * model.outerRadius - model.innerRadius) / 2);
var fact = i % 2 == 0 ? 1.00 : 1.15;
var x = mid_radius * fact * Math.cos(mid_angle);
var y = mid_radius * fact * Math.sin(mid_angle);
var myX = mid_radius2 * fact * Math.cos(mid_angle);
var myY = mid_radius2 * fact * Math.sin(mid_angle);
var myX2 = 0.91 * mid_radius2 * 1 * Math.cos(mid_angle);
var myY2 = 0.91 * mid_radius2 * 1 * Math.sin(mid_angle);
ctx.lineWidth = 2;
ctx.beginPath();
ctx.moveTo(model.x + myX2, model.y + myY2);
ctx.strokeStyle = '#232323';
ctx.lineTo(model.x + myX, model.y + myY);
ctx.stroke();
ctx.strokeStyle = 'black';
ctx.fillStyle = '#454545';
ctx.lineWidth = 0.3;
var label = chartInstance.config.data.labels[i];
var percent = String(Math.round(dataset.data[i] / total * 100)) + "%";
ctx.fillText(label, model.x + x, model.y + y);
ctx.strokeText(label, model.x + x, model.y + y);
ctx.fillText(dataset.data[i] + ' (' + percent + ')', model.x + x, model.y + y + 15);
ctx.strokeText(dataset.data[i] + ' (' + percent + ')', model.x + x, model.y + y + 15);
}
});
}
};
Chart.pluginService.register(drawItemsValuesPlugin);
var ctx = document.getElementById("myChart");
var myChart = new Chart(ctx, {
type: 'pie',
data: {
labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
datasets: [{
data: [15, 1, 1, 1, 45, 1],
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)',
'rgba(255, 159, 64, 0.2)'
],
borderColor: [
'rgba(255,99,132,1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(255, 159, 64, 1)'
],
borderWidth: 1
}]
},
options: {
legend: {
display: false
},
layout: {
padding: 140
}
}
});
<script src="https://dl.dropboxusercontent.com/s/yju3s0dqe32um2k/Chart.min.js"></script>
<canvas id="myChart" width="400" height="400"></canvas>