在Chart.js v 2.7.1中的条形图顶部显示数据

时间:2022-04-06 20:35:06

I am trying to show actual data value on top of bar in Chart.js (v 2.7.1) but it is not working. Here is my JSFIDDLE

我试图在Chart.js(v 2.7.1)的栏顶部显示实际数据值,但它无法正常工作。这是我的JSFIDDLE

So far, I am adding this bit of code to make it work.

到目前为止,我正在添加这些代码以使其工作。

showTooltips: false,
onAnimationComplete: function () {

    var ctx = this.chart.ctx;
    ctx.font = this.scale.font;
    ctx.fillStyle = this.scale.textColor
    ctx.textAlign = "center";
    ctx.textBaseline = "bottom";

    this.datasets.forEach(function (dataset) {
        dataset.bars.forEach(function (bar) {
            ctx.fillText(bar.value, bar.x, bar.y - 5);
        });
    })
}

What am I doing wrong? Feel free to fork the fiddle.

我究竟做错了什么?随意分叉小提琴。

1 个解决方案

#1


4  

You have to add the below code:

您必须添加以下代码:

Chart.plugins.register({
        afterDatasetsDraw: function(chart, easing) {
            // To only draw at the end of animation, check for easing === 1
            var ctx = chart.ctx;

            chart.data.datasets.forEach(function (dataset, i) {
                var meta = chart.getDatasetMeta(i);
                if (!meta.hidden) {
                    meta.data.forEach(function(element, index) {
                        // Draw the text in black, with the specified font
                        ctx.fillStyle = 'rgb(0, 0, 0)';

                        var fontSize = 16;
                        var fontStyle = 'normal';
                        var fontFamily = 'Helvetica Neue';
                        ctx.font = Chart.helpers.fontString(fontSize, fontStyle, fontFamily);

                        // Just naively convert to string for now
                        var dataString = dataset.data[index].toString();

                        // Make sure alignment settings are correct
                        ctx.textAlign = 'center';
                        ctx.textBaseline = 'middle';

                        var padding = 5;
                        var position = element.tooltipPosition();
                        ctx.fillText(dataString, position.x, position.y - (fontSize / 2) - padding);
                    });
                }
            });
        }
    });

Look at the updated Fiddle https://jsfiddle.net/ca7unnu4/

看看更新的小提琴https://jsfiddle.net/ca7unnu4/

#1


4  

You have to add the below code:

您必须添加以下代码:

Chart.plugins.register({
        afterDatasetsDraw: function(chart, easing) {
            // To only draw at the end of animation, check for easing === 1
            var ctx = chart.ctx;

            chart.data.datasets.forEach(function (dataset, i) {
                var meta = chart.getDatasetMeta(i);
                if (!meta.hidden) {
                    meta.data.forEach(function(element, index) {
                        // Draw the text in black, with the specified font
                        ctx.fillStyle = 'rgb(0, 0, 0)';

                        var fontSize = 16;
                        var fontStyle = 'normal';
                        var fontFamily = 'Helvetica Neue';
                        ctx.font = Chart.helpers.fontString(fontSize, fontStyle, fontFamily);

                        // Just naively convert to string for now
                        var dataString = dataset.data[index].toString();

                        // Make sure alignment settings are correct
                        ctx.textAlign = 'center';
                        ctx.textBaseline = 'middle';

                        var padding = 5;
                        var position = element.tooltipPosition();
                        ctx.fillText(dataString, position.x, position.y - (fontSize / 2) - padding);
                    });
                }
            });
        }
    });

Look at the updated Fiddle https://jsfiddle.net/ca7unnu4/

看看更新的小提琴https://jsfiddle.net/ca7unnu4/