在 chart.js 中的条形顶部显示值 [英] Show values on top of bars in chart.js

查看:32
本文介绍了在 chart.js 中的条形顶部显示值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

请参考这个小提琴:https://jsfiddle.net/4mxhogmd/1/

我正在研究 chart.js如果您在小提琴中看到,您会注意到在某些情况下无法正确显示栏顶部的值(超出画布)在研究时,我发现了这个链接 how to display data values on Chart.js

但在这里,他们也使用工具提示来处理条形内部的文本调整.我不要这个.

var ctx = document.getElementById("myChart");var myChart = 新图表(ctx,{类型:'酒吧',数据: {标签:[1 月 2 日"、1 月 9 日"、1 月 16 日"、1 月 23 日"、1 月 30 日"、2 月 6 日"、2 月 13 日"]、数据集:[{数据:[6, 87, 56, 15, 88, 60, 12],背景颜色:#4082c4"}]},选项: {悬停":{动画持续时间":0},动画片": {持续时间":1,onComplete":函数(){var chartInstance = this.chart,ctx = 图表实例.ctx;ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, Chart.defaults.global.defaultFontStyle, Chart.defaults.global.defaultFontFamily);ctx.textAlign = '中心';ctx.textBaseline = '底部';this.data.datasets.forEach(function (dataset, i) {var meta = chartInstance.controller.getDatasetMeta(i);meta.data.forEach(function (bar, index) {var data = dataset.data[index];ctx.fillText(data, bar._model.x, bar._model.y - 5);});});}},传奇: {显示":假},工具提示:{启用":假},尺度:{y轴:[{显示:假,网格线: {显示:假},刻度:{显示:假,零开始:真}}],x轴:[{网格线: {显示:假},刻度:{零开始:真}}]}}});

我想要的是在所有情况下仅在顶部显示价值.

解决方案

我从 myChart 内部定义的数据中取出数据,这样我就可以从数据集中取出最大值.然后在 yAxes 内部,您可以将最大刻度设置为数据集中的最大值 + 10.这可确保图表中的顶部条形不会超出画布边缘,也不会显示它们的值.

var ctx = document.getElementById("myChart");调试器;变量数据 = {标签:[1 月 2 日"、1 月 9 日"、1 月 16 日"、1 月 23 日"、1 月 30 日"、2 月 6 日"、2 月 13 日"]、数据集:[{数据:[150, 87, 56, 50, 88, 60, 45],背景颜色:#4082c4"}]}var myChart = 新图表(ctx,{类型:'酒吧',数据:数据,选项: {悬停":{动画持续时间":0},动画片": {持续时间":1,onComplete":函数(){var chartInstance = this.chart,ctx = 图表实例.ctx;ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, Chart.defaults.global.defaultFontStyle, Chart.defaults.global.defaultFontFamily);ctx.textAlign = '中心';ctx.textBaseline = '底部';this.data.datasets.forEach(function(dataset, i) {var meta = chartInstance.controller.getDatasetMeta(i);meta.data.forEach(function(bar, index) {var data = dataset.data[index];ctx.fillText(data, bar._model.x, bar._model.y - 5);});});}},传奇: {显示":假},工具提示:{启用":假},尺度:{y轴:[{显示:假,网格线: {显示:假},刻度:{最大值:Math.max(...data.datasets[0].data) + 10,显示:假,beginAtZero: 真}}],x轴:[{网格线: {显示:假},刻度:{beginAtZero: 真}}]}}});

<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.bundle.js"></script><canvas id="myChart" width="100" height="100"></canvas>

Please refer this Fiddle : https://jsfiddle.net/4mxhogmd/1/

I am working on chart.js If you see in fiddle, you will notice that value which is top on bar is not properly displayed in some cases(goes outside the canvas) While research I came across this link how to display data values on Chart.js

But here they used tooltip also for same cases to the text tweak inside of bars. I don't want this.

var ctx = document.getElementById("myChart");
var myChart = new Chart(ctx, {
    type: 'bar',
    data: {
        labels: ["2 Jan", "9 Jan", "16 Jan", "23 Jan", "30 Jan", "6 Feb", "13 Feb"],
        datasets: [{
            data: [6, 87, 56, 15, 88, 60, 12],
            backgroundColor: "#4082c4"
        }]
    },
    options: {
        "hover": {
            "animationDuration": 0
        },
        "animation": {
            "duration": 1,
            "onComplete": function () {
                var chartInstance = this.chart,
                ctx = chartInstance.ctx;

                ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, Chart.defaults.global.defaultFontStyle, Chart.defaults.global.defaultFontFamily);
                ctx.textAlign = 'center';
                ctx.textBaseline = 'bottom';

                this.data.datasets.forEach(function (dataset, i) {
                    var meta = chartInstance.controller.getDatasetMeta(i);
                    meta.data.forEach(function (bar, index) {
                        var data = dataset.data[index];                            
                        ctx.fillText(data, bar._model.x, bar._model.y - 5);
                    });
                });
            }
        },
        legend: {
            "display": false
        },
        tooltips: {
            "enabled": false
        },
        scales: {
            yAxes: [{
                display: false,
                gridLines: {
                    display : false
                },
                ticks: {
                    display: false,
                    beginAtZero:true
                }
            }],
            xAxes: [{
                gridLines: {
                    display : false
                },
                ticks: {
                    beginAtZero:true
                }
            }]
        }
    }
});

What I want is to show value on top only, for all cases.

解决方案

I pulled out the data from being defined inside of myChart that way I could pull out the max value from the dataset. Then inside of the yAxes you can set the max ticks to be the max value + 10 from your data set. This ensures that the top bars in the graph will not go off the edge of the canvas and not display their value.

var ctx = document.getElementById("myChart");
debugger;
var data = {
  labels: ["2 Jan", "9 Jan", "16 Jan", "23 Jan", "30 Jan", "6 Feb", "13 Feb"],
  datasets: [{
    data: [150, 87, 56, 50, 88, 60, 45],
    backgroundColor: "#4082c4"
  }]
}
var myChart = new Chart(ctx, {
  type: 'bar',
  data: data,
  options: {
    "hover": {
      "animationDuration": 0
    },
    "animation": {
      "duration": 1,
      "onComplete": function() {
        var chartInstance = this.chart,
          ctx = chartInstance.ctx;

        ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, Chart.defaults.global.defaultFontStyle, Chart.defaults.global.defaultFontFamily);
        ctx.textAlign = 'center';
        ctx.textBaseline = 'bottom';

        this.data.datasets.forEach(function(dataset, i) {
          var meta = chartInstance.controller.getDatasetMeta(i);
          meta.data.forEach(function(bar, index) {
            var data = dataset.data[index];
            ctx.fillText(data, bar._model.x, bar._model.y - 5);
          });
        });
      }
    },
    legend: {
      "display": false
    },
    tooltips: {
      "enabled": false
    },
    scales: {
      yAxes: [{
        display: false,
        gridLines: {
          display: false
        },
        ticks: {
          max: Math.max(...data.datasets[0].data) + 10,
          display: false,
          beginAtZero: true
        }
      }],
      xAxes: [{
        gridLines: {
          display: false
        },
        ticks: {
          beginAtZero: true
        }
      }]
    }
  }
});

<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.5.0/Chart.bundle.js"></script>
<canvas id="myChart" width="100" height="100"></canvas>

这篇关于在 chart.js 中的条形顶部显示值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆