<tfoot id='GdA82'></tfoot>

    <bdo id='GdA82'></bdo><ul id='GdA82'></ul>

      <i id='GdA82'><tr id='GdA82'><dt id='GdA82'><q id='GdA82'><span id='GdA82'><b id='GdA82'><form id='GdA82'><ins id='GdA82'></ins><ul id='GdA82'></ul><sub id='GdA82'></sub></form><legend id='GdA82'></legend><bdo id='GdA82'><pre id='GdA82'><center id='GdA82'></center></pre></bdo></b><th id='GdA82'></th></span></q></dt></tr></i><div id='GdA82'><tfoot id='GdA82'></tfoot><dl id='GdA82'><fieldset id='GdA82'></fieldset></dl></div>

      1. <small id='GdA82'></small><noframes id='GdA82'>

        <legend id='GdA82'><style id='GdA82'><dir id='GdA82'><q id='GdA82'></q></dir></style></legend>

        如何使用 chart.js 将图像作为标签添加到画布图表

        How to add an images as labels to Canvas Charts using chart.js(如何使用 chart.js 将图像作为标签添加到画布图表)

        <small id='PvkJy'></small><noframes id='PvkJy'>

      2. <i id='PvkJy'><tr id='PvkJy'><dt id='PvkJy'><q id='PvkJy'><span id='PvkJy'><b id='PvkJy'><form id='PvkJy'><ins id='PvkJy'></ins><ul id='PvkJy'></ul><sub id='PvkJy'></sub></form><legend id='PvkJy'></legend><bdo id='PvkJy'><pre id='PvkJy'><center id='PvkJy'></center></pre></bdo></b><th id='PvkJy'></th></span></q></dt></tr></i><div id='PvkJy'><tfoot id='PvkJy'></tfoot><dl id='PvkJy'><fieldset id='PvkJy'></fieldset></dl></div>

                  <tbody id='PvkJy'></tbody>

                  <bdo id='PvkJy'></bdo><ul id='PvkJy'></ul>
                  <tfoot id='PvkJy'></tfoot>
                • <legend id='PvkJy'><style id='PvkJy'><dir id='PvkJy'><q id='PvkJy'></q></dir></style></legend>
                  本文介绍了如何使用 chart.js 将图像作为标签添加到画布图表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                  问题描述

                  我正在生成一个 chart.js 画布条形图.我想要做的是,在标签数组中,添加与每个标签一起使用的图像,而不仅仅是文本标签本身.这是图表的代码:我从中获取数据的 json 对象有一个我想用来显示图片的图像 url:

                  I am generating a chart.js canvas bar chart. What I am trying to do is, inside of the labels array, add images that go with each label, as opposed to just the text label itself. Here is the code for the chart: The json object that I am getting data from has an image url that I want to use to display the picture:

                  $.ajax({
                  method: "get",
                  url: "http://localhost:3000/admin/stats/show",
                  dataType: "json",
                  error: function() {
                    console.log("Sorry, something went wrong");
                  },
                  success: function(response) {
                    console.log(response)
                    var objectToUse = response.top_dogs
                    var updateLabels = [];
                    var updateData = [];
                    for (var i = 0; i < objectToUse.length; i+=1) {
                      updateData.push(objectToUse[i].win_percentage * 100);
                      updateLabels.push(objectToUse[i].title);
                    }
                    var data = {
                      labels: updateLabels,
                      datasets: [
                        {
                          label: "Top Winners Overall",
                          fillColor: get_random_color(),
                          strokeColor: "rgba(220,220,220,0.8)",
                          highlightFill: get_random_color(),
                          highlightStroke: "rgba(220,220,220,1)",
                          data: updateData
                        }
                      ]
                    };
                  
                    var options = {
                      //Boolean - Whether the scale should start at zero, or an order of magnitude down from the lowest value
                      scaleBeginAtZero : true,
                  
                      //Boolean - Whether grid lines are shown across the chart
                      scaleShowGridLines : true,
                  
                      //String - Colour of the grid lines
                      scaleGridLineColor : "rgba(0,0,0,.05)",
                  
                      //Number - Width of the grid lines
                      scaleGridLineWidth : 1,
                  
                      //Boolean - Whether to show horizontal lines (except X axis)
                      scaleShowHorizontalLines: true,
                  
                      //Boolean - Whether to show vertical lines (except Y axis)
                      scaleShowVerticalLines: true,
                  
                      //Boolean - If there is a stroke on each bar
                      barShowStroke : true,
                  
                      //Number - Pixel width of the bar stroke
                      barStrokeWidth : 2,
                  
                      //Number - Spacing between each of the X value sets
                      barValueSpacing : 5,
                  
                      //Number - Spacing between data sets within X values
                      barDatasetSpacing : 2,
                    };
                  
                    var loadNewChart = new Chart(barChart).Bar(data, options);
                    }    
                  

                  });

                  如果有人有解决方案,将不胜感激!

                  If anyone has a solution it would be greatly appreciated!

                  推荐答案

                  我知道这是一个旧帖子,但由于它已经被查看了很多次,我将描述一个适用于当前图表的解决方案.js 版本 2.9.3.

                  I'm aware that this is an old post but since it has been viewed so many times, I'll describe a solution that works with the current Chart.js version 2.9.3.

                  插件核心 API 提供了一个可用于执行自定义代码的一系列钩子.您可以通过 afterDraw 挂钩直接在画布上绘制图像(图标)" rel="noreferrer">CanvasRenderingContext2D.

                  The Plugin Core API offers a range of hooks that may be used for performing custom code. You can use the afterDraw hook to draw images (icons) directly on the canvas using CanvasRenderingContext2D.

                  plugins: [{
                    afterDraw: chart => {
                      var ctx = chart.chart.ctx;
                      var xAxis = chart.scales['x-axis-0'];
                      var yAxis = chart.scales['y-axis-0'];
                      xAxis.ticks.forEach((value, index) => {
                        var x = xAxis.getPixelForTick(index);
                        var image = new Image();
                        image.src = images[index],
                          ctx.drawImage(image, x - 12, yAxis.bottom + 10);
                      });
                    }
                  }],
                  

                  标签的位置必须通过 xAxes.ticks.padding 定义如下:

                  The position of the labels will have to be defined through the xAxes.ticks.padding as follows:

                  xAxes: [{
                    ticks: {
                      padding: 30
                    }   
                  }],
                  

                  请查看以下可运行的代码片段.

                  Please have a look at the following runnable code snippet.

                  const labels = ['Red Vans', 'Blue Vans', 'Green Vans', 'Gray Vans'];
                  const images = ['https://i.stack.imgur.com/2RAv2.png', 'https://i.stack.imgur.com/Tq5DA.png', 'https://i.stack.imgur.com/3KRtW.png', 'https://i.stack.imgur.com/iLyVi.png'];
                  const values = [48, 56, 33, 44];
                  
                  new Chart(document.getElementById("myChart"), {
                    type: "bar",
                    plugins: [{
                      afterDraw: chart => {      
                        var ctx = chart.chart.ctx; 
                        var xAxis = chart.scales['x-axis-0'];
                        var yAxis = chart.scales['y-axis-0'];
                        xAxis.ticks.forEach((value, index) => {  
                          var x = xAxis.getPixelForTick(index);      
                          var image = new Image();
                          image.src = images[index],
                          ctx.drawImage(image, x - 12, yAxis.bottom + 10);
                        });      
                      }
                    }],
                    data: {
                      labels: labels,
                      datasets: [{
                        label: 'My Dataset',
                        data: values,
                        backgroundColor: ['red', 'blue', 'green', 'lightgray']
                      }]
                    },
                    options: {
                      responsive: true,
                      legend: {
                        display: false
                      },    
                      scales: {
                        yAxes: [{ 
                          ticks: {
                            beginAtZero: true
                          }
                        }],
                        xAxes: [{
                          ticks: {
                            padding: 30
                          }   
                        }],
                      }
                    }
                  });

                  <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.3/Chart.min.js"></script>
                  <canvas id="myChart" height="90"></canvas>

                  这篇关于如何使用 chart.js 将图像作为标签添加到画布图表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                  本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                  相关文档推荐

                  在开发JS过程中,会经常遇到两个小数相运算的情况,但是运算结果却与预期不同,调试一下发现计算结果竟然有那么长一串尾巴。如下图所示: 产生原因: JavaScript对小数运算会先转成二进制,运算完毕再转回十进制,过程中会有丢失,不过不是所有的小数间运算会
                  问题描述: 在javascript中引用js代码,然后导致反斜杠丢失,发现字符串中的所有\信息丢失。比如在js中引用input type=text onkeyup=value=value.replace(/[^\d]/g,) ,结果导致正则表达式中的\丢失。 问题原因: 该字符串含有\,javascript对字符串进行了转
                  Rails/Javascript: How to inject rails variables into (very) simple javascript(Rails/Javascript:如何将 rails 变量注入(非常)简单的 javascript)
                  CoffeeScript always returns in anonymous function(CoffeeScript 总是以匿名函数返回)
                  Ordinals in words javascript(javascript中的序数)
                  getFullYear returns year before on first day of year(getFullYear 在一年的第一天返回前一年)

                  <small id='Kr1AX'></small><noframes id='Kr1AX'>

                  <tfoot id='Kr1AX'></tfoot>
                  • <bdo id='Kr1AX'></bdo><ul id='Kr1AX'></ul>
                    <legend id='Kr1AX'><style id='Kr1AX'><dir id='Kr1AX'><q id='Kr1AX'></q></dir></style></legend>

                    <i id='Kr1AX'><tr id='Kr1AX'><dt id='Kr1AX'><q id='Kr1AX'><span id='Kr1AX'><b id='Kr1AX'><form id='Kr1AX'><ins id='Kr1AX'></ins><ul id='Kr1AX'></ul><sub id='Kr1AX'></sub></form><legend id='Kr1AX'></legend><bdo id='Kr1AX'><pre id='Kr1AX'><center id='Kr1AX'></center></pre></bdo></b><th id='Kr1AX'></th></span></q></dt></tr></i><div id='Kr1AX'><tfoot id='Kr1AX'></tfoot><dl id='Kr1AX'><fieldset id='Kr1AX'></fieldset></dl></div>
                      <tbody id='Kr1AX'></tbody>