我正在使用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/
答案 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: {}
});