8👍
✅
Add this code to your options object:
animation: {
onComplete: function () {
var chartInstance = this.chart;
var ctx = chartInstance.ctx;
console.log(chartInstance);
var height = chartInstance.controller.boxes[0].bottom;
ctx.textAlign = "center";
Chart.helpers.each(this.data.datasets.forEach(function (dataset, i) {
var meta = chartInstance.controller.getDatasetMeta(i);
Chart.helpers.each(meta.data.forEach(function (bar, index) {
ctx.fillText(dataset.data[index], bar._model.x, height - ((height - bar._model.y) / 2));
}),this)
}),this);
}
}
https://jsfiddle.net/h4p8f5xL/
UPDATE 2
Surround your canvas with a container with your desired width and height
<div style="width: 100%; height: 500px">
<canvas id="myChart" width="400" height="400"></canvas>
</div>
and add the following into your options object
// Boolean - whether or not the chart should be responsive and resize when the browser does.
responsive: true,
// Boolean - whether to maintain the starting aspect ratio or not when responsive, if set to false, will take up entire container
maintainAspectRatio: false,
6👍
If you would like to render centered text for each element, there is an easier way:
Chart.helpers.each(meta.data.forEach(function (bar, index) {
var centerPoint = bar.getCenterPoint();
ctx.fillText(dataset.data[index], centerPoint.x, centerPoint.y));
}),this)
It seems that ‘getCenterPoint’ isn’t available in version 2.1.3 (that you use in your example). I tried it with 2.5.0 and it works
1👍
By now, a plugin is available that handles exactly this use case!
It’s called chartjs-plugin-datalabels and documentation can be found here:
https://chartjs-plugin-datalabels.netlify.app/guide/getting-started.html
Source:stackexchange.com