Chart.js每个点的自定义图像

Chart.js Custom Image for Each Point

本文关键字:自定义 图像 js Chart      更新时间:2023-09-26

我使用的是Chart.js,我正在为散点图上的每个点寻找自定义图像的帮助。我尝试过使用javascript图像数组,但它不起作用。我是画布和html5的新手。

我希望每个点都是用户的小个人资料图片,而不是圆形。

举个例子将不胜感激。

我目前有:

var ctx = document.getElementById("member-graph-scatter");
    var myChart = new Chart(ctx, {
        type: 'line',
        data: {
            datasets: [{
                label: 'Miles / Feet',
                data: [<?php echo $member_scatter_graph_miles_climbing; ?>],
                backgroundColor: "rgba(255,99,132,0.6)",
                borderColor: "rgba(75,192,192,1)",
            }]
        },
        options: {
            scales: {
                yAxes: [{
                    scaleLabel: {
                        display: true,
                        labelString: 'Feet Climbed (ft)'
                    }
                }],
                xAxes: [{
                    scaleLabel: {
                        display: true,
                        labelString: 'Miles Ridden (miles)'
                    },
                    type: 'linear',
                    position: 'bottom'
                }]
            },
            showLines: false
        }
    });

这个图运行良好,但是,这些点显然是默认的圆。

根据我需要使用的文件:

"如果选项是图像,则使用drawImage.image,Array在画布上绘制该图像",可在以下位置查看:http://www.chartjs.org/docs/

var yourImage = new Image(),
    yourImage.src ='http://your.site.com/your_image.png';
data = {
      labels: ['one', 'two', 'three'],
      datasets: [{
        label: 'Label1',
        pointRadius: [0,0,0,0,20],
        pointHoverRadius: [0,0,0,0,20],
        pointHitRadius: [0,0,0,0,20],
        pointStyle: ['', '', '', '', yourImage],
        data: [1,2,3]
      }, {
        label: 'label2',
        pointRadius: [0,0,0,0,20],
        pointHoverRadius: [0,0,0,0,20],
        pointHitRadius: [0,0,0,0,20],
        pointStyle: ['', '', '', '', yourImage],
        data: [1,2,3]
      }]

这里有一个更完整的例子。它显示了如何为单个点或所有点设置样式。

  var yourImage = new Image()
  yourImage.src ='http://your.site.com/your_image.png';
  var imageData = {
    labels: ['one', 'two', 'three', 'four'],
    datasets: [{
      label: 'Label1',
      pointRadius: [10, 0, 10, 10],
      pointHoverRadius: 20,
      pointHitRadius: 20,
      pointStyle: ['rect', yourImage, 'triangle', 'circle'],
      pointBackgroundColor: "rgba(0,191,255)",
      data: [1.5, 2.3, 3, 2.5]
    }]
  }
  window.onload = function() {
    var lineID = document.getElementById('canvas').getContext('2d');
    var lineChart = new Chart(lineID, {
      type: 'line',
      data: imageData,
      options: {}
    });

我试图在Vue应用程序(使用Webpack构建)中实现这一点,并获得了以下解决方案。导入图像并创建图像元素,如下所示:

import myIcon from '@/assets/my-icon.svg'
const chartPoint = new Image()
chartPoint.src = myIcon

然后在您的chart.js数据集选项中(根据您的需要进行调整):

{
  data: data,
  pointRadius: 10,
  borderWidth: 0,
  pointStyle: chartPoint,
...
}

drawImage()采用各种类型的图像元素,但最简单的只是一个HTMLImageElement,您可以在标记中或使用Javascript创建它,如上所述。