J'essaie d'implémenter l'événement de clic sur le graphique à barres empilées.
Les données ressemblent à ci-dessous:
var chartData = {
type: 'horizontalBar',
data: {
labels: ['A0224', 'A3681', 'A3984', 'A4101', 'A4150', 'B0682', 'Others'],
datasets: [
{
label: "P1",
backgroundColor: '#cc3399',
data: [6, 7, 6, 8, 6, 10, 3]
},
{
label: "P2",
backgroundColor: '#0099ff',
data: [8, 9, 5, 8, 6, 10, 3]
},
{
label: "P3",
backgroundColor: '#0022ff',
data: [6, 7, 6, 8, 6, 10, 3]
}
]
},
options: {
legend: { display: false },
scales: {
yAxes: [{
stacked: true
}],
xAxes: [{
stacked: true
}]
},
}
}
La méthode de création d'événement de clic et de graphique ressemble à ci-dessous:
var myChart = new
Chart(document.getElementById("createCurrYearHccGapChart"),
chartData);
var canvas = document.getElementById('createCurrYearHccGapChart');
canvas.onclick = function (evt) {
var activePoints = myChart.getElementsAtEvent(evt);
var cdata = activePoints[0]['_chart'].config.data;
var idx = activePoints[0]['_index'];
var label = cdata.datasets[idx].label;
var value = cdata.datasets[0].data[idx];
};
Et le graphique ressemble à ci-dessous:
Voici les valeurs que j'obtiens chaque fois que je clique sur une seule barre:
Barre 1 - étiquette = P1, valeur = 6
Barre 2 - étiquette = P2, valeur = 7
Barre 3 - étiquette = P3, valeur = 6 et etc ...
Problème:
Donc, chaque fois que je clique sur la 1ère barre, l'étiquette est P1, car j'obtiens la valeur d'index 0 pour la barre entière et 1 pour la barre 2 et ainsi de suite.
Question:
Existe-t-il un moyen d'identifier la valeur de la coordonnée x? afin que je puisse identifier le clic est de quelle pile.
Pour ce faire, vous pouvez utiliser le gestionnaire d'événements au clic suivant pour votre graphique ...
canvas.onclick = function(evt) {
var activePoint = myChart.getElementAtEvent(evt)[0];
var data = activePoint._chart.data;
var datasetIndex = activePoint._datasetIndex;
var label = data.datasets[datasetIndex].label;
var value = data.datasets[datasetIndex].data[activePoint._index];
};
ᴡᴏʀᴋɪɴɢ ᴇxᴀᴍᴘʟᴇ ⧩
var chartData = {
type: 'horizontalBar',
data: {
labels: ['A0224', 'A3681', 'A3984', 'A4101', 'A4150', 'B0682', 'Others'],
datasets: [{
label: "P1",
backgroundColor: '#cc3399',
data: [6, 7, 6, 8, 6, 10, 3]
}, {
label: "P2",
backgroundColor: '#0099ff',
data: [8, 9, 5, 8, 6, 10, 3]
}, {
label: "P3",
backgroundColor: '#0022ff',
data: [6, 7, 6, 8, 6, 10, 3]
}]
},
options: {
responsive: false,
legend: {
display: false
},
scales: {
yAxes: [{
stacked: true
}],
xAxes: [{
stacked: true
}]
},
}
}
var canvas = document.getElementById('createCurrYearHccGapChart');
var myChart = new Chart(canvas, chartData);
canvas.onclick = function(evt) {
var activePoint = myChart.getElementAtEvent(evt)[0];
var data = activePoint._chart.data;
var datasetIndex = activePoint._datasetIndex;
var label = data.datasets[datasetIndex].label;
var value = data.datasets[datasetIndex].data[activePoint._index];
console.log(label, value);
};
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.6.0/Chart.min.js"></script>
<canvas id="createCurrYearHccGapChart" height="170"></canvas>