gpt4 book ai didi

javascript - 如何使用 vue-chartjs 将图像添加到图表标签?

转载 作者:行者123 更新时间:2023-12-04 03:39:42 25 4
gpt4 key购买 nike

我想在国家代码标签下添加国旗图标,但完全卡住了。

Image of the chart with my current code

图像名为 BR.svg、FR.svg 和 MX.svg,位于 @/assets/icons/flags/

我在我的项目中使用 vue@2.6.12vue-chartjs@3.5.1。这是我的Chart.vue 组件:

<script>
import { Bar } from 'vue-chartjs'

export default {
extends: Bar,
data: () => ({
chartdata: {
labels: ['BR', 'FR', 'MX'],
datasets: [
{
label: 'Lorem ipsum',
backgroundColor: '#AF78D2',
data: [39, 30, 30],
}
]
},
options: {
responsive: true,
maintainAspectRatio: false,
legend: {
display: false,
},
tooltips: {
"enabled": false
},
scales : {
xAxes : [ {
gridLines : {
display : false
}
} ],
yAxes: [{
ticks: {
beginAtZero: true,
suggestedMin: 0,
suggestedMax: 40,
stepSize: 5,
}
}]
},
"hover": {
"animationDuration": 0
},
"animation": {
"duration": 1,
"onComplete": function() {
var chartInstance = this.chart,
ctx = chartInstance.ctx;

ctx.font = Chart.helpers.fontString(Chart.defaults.global.defaultFontSize, Chart.defaults.global.defaultFontStyle, Chart.defaults.global.defaultFontFamily);
ctx.textAlign = 'center';
ctx.textBaseline = 'bottom';

this.data.datasets.forEach(function(dataset, i) {
var meta = chartInstance.controller.getDatasetMeta(i);
meta.data.forEach(function(bar, index) {
var data = dataset.data[index] + '%';
ctx.fillText(data, bar._model.x, bar._model.y - 5);
});
});
}
},
}
}),
mounted () {
this.renderChart(this.chartdata, this.options)
}
}
</script>

下面的这段可运行代码是我经过数小时搜索得出的最接近解决方案的代码。但它仍然无法解决问题,因为我不知道如何将它与我现有的相集成。

const labels = ['Red Vans', 'Blue Vans', 'Green Vans', 'Gray Vans'];
const images = ['/image/2RAv2.png', '/image/Tq5DA.png', '/image/3KRtW.png', '/image/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>

当我将插件代码添加到我自己的代码中时,我收到一条错误消息,指出“插件”已在 Prop 中定义,但我无法以某种方式使用它。

有人知道如何在我的代码中实现这个 afterDraw 插件吗?我感谢任何意见。

提前致谢! :)

最佳答案

在您的 vue 组件的挂载中,您可以像这样调用 addPlugin(必须在 renderChart 方法之前完成):

this.addPlugin({
id: 'image-label',
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);
});
}
})

文档:https://vue-chartjs.org/api/#addplugin

关于javascript - 如何使用 vue-chartjs 将图像添加到图表标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66263008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com