当前位置: 首页 > 知识库问答 >
问题:

在chart.js栏顶部显示值

梅安平
2023-03-14

请参阅此小提琴:https://jsfiddle.net/4mxhogmd/1/

我正在做图表。js如果您在fiddle中看到,您会注意到,在某些情况下,位于条形图顶部的值没有正确显示(超出画布),而我在研究如何在图表上显示数据值时遇到了这个链接。js

但在这里,他们也在同样的情况下使用工具提示来调整条内的文本。我不要这个。

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
                }
            }]
        }
    }
});

我想要的是,在所有情况下,只在顶部显示值。

共有3个答案

和魁
2023-03-14

这里有一个更健壮的解决方案,它将在轴高度接近条形高度的情况下在条形图内部显示数据点值。换言之,如果文本将延伸到画布可见区域之外,则这将显示条上方和/或条下方的值。

Chart.plugins.register({
  afterDraw: function(chartInstance) {
    if (chartInstance.config.options.showDatapoints) {
      var helpers = Chart.helpers;
      var ctx = chartInstance.chart.ctx;
      var fontColor = helpers.getValueOrDefault(chartInstance.config.options.showDatapoints.fontColor, chartInstance.config.options.defaultFontColor);

      // render the value of the chart above the bar
      ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, 'normal', Chart.defaults.global.defaultFontFamily);
      ctx.textAlign = 'center';
      ctx.textBaseline = 'bottom';
      ctx.fillStyle = fontColor;

      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;
          var scaleMax = dataset._meta[Object.keys(dataset._meta)[0]].data[i]._yScale.maxHeight;
          var yPos = (scaleMax - model.y) / scaleMax >= 0.93 ? model.y + 20 : model.y - 5;
          ctx.fillText(dataset.data[i], model.x, yPos);
        }
      });
    }
  }
});

您可以通过在图表选项中添加以下属性来启用图表使用插件。

showDatapoints: true,
冯翔
2023-03-14

我发现最快的方法就是使用这个插件:https://github.com/chartjs/chartjs-plugin-datalabels

只需将插件导入到js文件即可将标签添加到图表中,例如:

import 'chartjs-plugin-datalabels'

如果您想在顶部(全局)应用it值,只需在代码中设置这些选项:

Chart.defaults.global.plugins.datalabels.anchor = 'end';
Chart.defaults.global.plugins.datalabels.align = 'end';

更多选项可以在这里找到:https://chartjs-plugin-datalabels.netlify.com/options.html

万俟沛
2023-03-14

我从myChart内部定义的数据中提取数据,这样我就可以从数据集中提取最大值。然后在Yax内部,您可以将数据集中的最大刻度设置为最大值10。这可确保图形中的顶部栏不会离开画布边缘,也不会显示其值。

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>
 类似资料:
  • @在创建时覆盖受保护的无效(捆绑保存的InstanceState){ menifest文件:

  • 我正在用Java和JAVAFX开发一个国际象棋游戏。我的棋盘是一个JAVAFX组,包含一个正方形数组。我的正方形继承自JAVAFX rectangle类。我想在这些方块里面画一个图像(棋子的图像),但是我似乎找不到方法。当我使用setfill来绘制图案时,正方形的颜色消失了,这不是我想要的,我希望图像是透明的,并绘制在每个正方形的顶部。有什么想法吗?

  • 视图与所有其他选项卡栏项目(事件、挂起、浏览、我的个人资料)配合良好,但对于“更多”部分,当推送到相关视图控制器时,选项卡栏视图控制器将显示选项卡栏上方的新底部栏,如图所示。 现在我试图设置底部栏为无,试图隐藏底部栏在属性检查员,没有工作。我想帮助删除这个空白视图视为底部栏,显示在标签栏上方。

  • 我正在做这个练习,在这个练习中,我必须交替显示堆栈顶部的元素,然后是底部的元素,直到它是空的。我仍然发现很难利用递归来解决这些练习,我想知道是否有人可以帮助我。我不能使用循环,只是递归。这是说明:“给定stack_t抽象数据类型及其定义的操作:创建,顶部,推送,弹出,元素(返回堆栈中元素的数量),破坏:完成接收堆栈并显示堆栈中交替启动的项的one_and_one函数用顶部元素,然后用底部元素,直到

  • 我最近更新了我的charts.js库到最新版本(2.5.0)。这个版本不显示图表上的标签。 我有一个在《小提琴手:http://jsfiddle.net/g6fajwg8》上工作的例子。 但是,我完全按照示例中的方式定义了我的图表,但仍然看不到图表上的标签。 注意:在Google和Stackoverflow上有很多这样的问题,但其中大多数都是关于以前的版本,这些版本在它们上运行良好。

  • 顶部导航栏放在页面头部: 实例<nav data-topbar>   <ul>     <li>       <!-- 如果你不需要标题或图标可以删掉它 -->       <h1><a href="#">WebSiteName</a></h1>     </li>       <!-- 小屏幕上折叠按钮: 去掉 .menu-icon 类,可以去除图标。       如果需要只显示图片,可以删除