jar*_*d k 7 javascript canvas chart.js
我正在生成一个chart.js画布条形图.我想要做的是,在标签数组中,添加与每个标签一起使用的图像,而不仅仅是文本标签本身.这是图表的代码:我从中获取数据的json对象有一个我想用来显示图片的图片网址:
$.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);
}
Run Code Online (Sandbox Code Playgroud)
});
如果有人有解决方案,将不胜感激!
我知道这是一篇旧帖子,但由于它已经被查看了很多次,我将描述一个适用于当前 Chart.js 版本 2.9.3 的解决方案。
所述插件核心API提供了一系列可用于执行自定义代码钩。您可以使用afterDraw钩子直接在画布上绘制图像(图标)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);
});
}
}],
Run Code Online (Sandbox Code Playgroud)
标签的位置必须通过xAxes.ticks.padding如下定义:
xAxes: [{
ticks: {
padding: 30
}
}],
Run Code Online (Sandbox Code Playgroud)
请查看以下可运行的代码片段。
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);
});
}
}],
Run Code Online (Sandbox Code Playgroud)
xAxes: [{
ticks: {
padding: 30
}
}],
Run Code Online (Sandbox Code Playgroud)