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

时间:2016-07-27 22:28:32

标签: javascript charts chart.js

我正在使用Chart.js,我正在寻找散点图上每个点的自定义图像的帮助。我已经尝试使用javascript数组图像,但它无法正常工作。我是canvas和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在画布上绘制该图像。图像,数组”可在以下位置查看:http://www.chartjs.org/docs/

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:2)

我试图在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来创建。

答案 2 :(得分:0)

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

  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: {}
    });