У меня возникла проблема при попытке настроить всплывающую подсказку для смешанной диаграммы с помощью chart.js.
У меня есть гистограмма, которая показывает общую прибыль для определенного продукта и линейную диаграмму, чтобы показать общее количество этого определенного продукта. Когда я нависаю над гистограммой, я хотел, чтобы всплывающая подсказка показывала что-то вроде:
Total profit: $ 1399.30
Цена должна быть в двух десятичном формате, прилагаемом к обороту "Общая прибыль: $". Когда я наводил курсор на линейную диаграмму, я хотел показать что-то вроде:
Quantity sold: 40 unit(s)
Вот мой код для заполнения связанного массива:
for(var i = 0 ; i < topProductList.length; i++){
labelData.push(topProductList[i].itemName);
amountData.push((topProductList[i].price * topProductList[i].quantity).toFixed(2));
quantityData.push(topProductList[i].quantity);
}
Обратный вызов, когда я попытался объединить этикетку оси X, как это было предложено в @GRUNT:
tooltips: {
callbacks: {
title: function(t, d) {
return d.labels[t[0].index].replace(/\n/, ' ');
}
}
}
Опция для моей диаграммы:
var opt = {
type: "bar",
data: {
labels: labelData,
datasets: [{
type: "bar",
label: 'Total Profit ',
data: amountData,
},{
type: "line",
label: 'Quantity Sold ',
data: quantityData,
}]
},
options: options
};
На данный момент, когда я нахожу гистограмму, я получаю Total profit: 1399.3
и для линейной диаграммы. Quantity sold: 40
что не является моим желаемым результатом, как указано выше.
Любые идеи о том, как переопределить настройку наклонной подсказки?
Спасибо!
Вы можете использовать функцию обратного вызова метки всплывающей подсказки для отображения разных ярлыков подсказок при зависании на разных графиках:
tooltips: {
callbacks: {
label: function(t, d) {
var xLabel = d.datasets[t.datasetIndex].label;
var yLabel = t.yLabel;
// if line chart
if (t.datasetIndex === 0) return xLabel + ': ' + yLabel + ' unit(s)';
// if bar chart
else if (t.datasetIndex === 1) return xLabel + ': $' + yLabel.toFixed(2);
}
}
}
Кроме того, ваш первый набор данных должен быть для line
диаграммы, а затем bar
, например:
datasets: [{
type: "line",
label: 'Quantity Sold ',
data: quantityData
}, {
label: 'Total Profit ',
data: amountData
}]
ᴡᴏʀᴋɪɴɢ ᴇxᴀᴍᴘʟᴇ ⧩
var chart = new Chart(ctx, {
type: 'bar',
data: {
labels: ['Jan', 'Feb', 'Mar', 'Apr', 'May'],
datasets: [{
type: "line",
label: 'Quantity Sold',
data: [40, 50, 60, 70, 80],
borderColor: 'orange',
fill: false
}, {
label: 'Total Profit',
data: [1399.3, 356.62, 1249, 465.23, 1480.4],
backgroundColor: 'rgba(0, 119, 220, 0.4)',
}]
},
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero: true
}
}]
},
tooltips: {
callbacks: {
label: function(t, d) {
var xLabel = d.datasets[t.datasetIndex].label;
var yLabel = t.yLabel;
// if line chart
if (t.datasetIndex === 0) return xLabel + ': ' + yLabel + ' unit(s)';
// if bar chart
else if (t.datasetIndex === 1) return xLabel + ': $' + yLabel.toFixed(2);
}
}
}
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.7.0/Chart.min.js"></script>
<canvas id="ctx"></canvas>