如何在Chart.js中重新格式化工具提示?该图表的x轴为时间,y轴为销售额,工具提示显示x和y的数据值。到目前为止工具提示默认可以工作,但我想改变我们在工具提示中看到的值。我可以通过在&time;'中重新定义tooltipFormat字段来重新格式化工具提示中的时间。但我找不到与y轴数据类似的东西。例如,显示" $ 1600"而不是"每日门票销售:1600"。
example tooltip format image
有谁能告诉我这种变化应该在哪里发生?
'定制'回调函数在这里解决问题?这是代码,谢谢!
var dates=data.linechart.dates;
var times=[];
for (var i=0; i<dates.length; i++) {
times.push(moment(dates[i],'YYYY/MM/DD'));
}
// console.log(dates);
// console.log(times);
var salesData = {
labels: times,
datasets: [
{
label: "Daily Ticket Sales",
fill: false,
lineTension: 0,
backgroundColor: "#fff",
borderColor: "rgba(255,88,20,0.4)",
borderCapStyle: 'butt',
borderDash: [],
borderDashOffset: 0.0,
borderJoinStyle: 'miter',
pointBorderColor: "rgba(255,88,20,0.4)",
pointBackgroundColor: "#fff",
pointBorderWidth: 1,
pointHoverRadius: 5,
pointHoverBackgroundColor: "rgba(255,88,20,0.4)",
pointHoverBorderColor: "rgba(220,220,220,1)",
pointHoverBorderWidth: 2,
pointRadius: 3,
pointHitRadius: 10,
data: data.linechart.sales,
}
]
};
var ctx = document.getElementById("daily_sale").getContext("2d");
var myLineChart = new Chart(ctx, {
type: 'line',
data: salesData,
options: {
showLines: true,
responsive: true,
legend:{display:false},
tooltips:{
// backgroundColor:'rgba(0,255,0,0.8)',
custom: function(tooltip) {
// tooltip will be false if tooltip is not visible or should be hidden
if (!tooltip) {
return;
}
else{
console.log(tooltip);
}
}
},
scales:
{
xAxes: [{
type: "time",
time: {
displayFormat:'MM/DD/YY',
tooltipFormat: 'MM/DD/YY',
// unit: 'day',
}
}],
yAxes: [{
ticks:{ userCallback: function(value, index, values) {
// $ sign and thousand seperators
return '$'+value.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
},
},
}],
},
}
});
答案 0 :(得分:3)
您可以在回调函数中自定义标签。
max
答案 1 :(得分:3)
scales: {
xAxes: [{
type: 'time',
time: {
tooltipFormat:'MM/DD/YYYY', // <- HERE
displayFormats: {
'millisecond':'HH:mm:ss',
'second': 'HH:mm:ss',
'minute': 'HH:mm:ss',
'hour': 'HH:mm:ss',
'day': 'HH:mm:ss',
'week': 'HH:mm:ss',
'month': 'HH:mm:ss',
'quarter': 'HH:mm:ss',
'year': 'HH:mm:ss',
}
}
}]
}
答案 2 :(得分:1)
有点晚了,但是@LeonF的回答可能很好,但是当我使用很多数据集和大量数据时,没有完全 ,所以如果有人需要它,我在这里离开我的代码,所以标签有正确的标签和格式化值(我希望这有助于某人):
var myChart = new Chart(ctx, {
type: 'line',
data: {
labels: _labels,
datasets: [...]
},
options: {
scales: {
yAxes: [{
ticks: {
beginAtZero: true,
stacked: false,
callback: function (label, index, labels) {
return '$' + label / 1000000;
}
},
scaleLabel: {
display: true,
labelString: 'Millones de pesos'
}
}]
},
tooltips: {
callbacks: {
label: function (tti, data) {
// Here is the trick: the second argument has the dataset label
return '{0}: {1}'.Format(data.datasets[tti.datasetIndex].label, formatMoney(tti.yLabel));
}
}
},
title: {
display: true,
text: 'Avance global'
}
}
});
我还留下了String.Format
的功能:
String.prototype.format = String.prototype.Format = function () {
var args = arguments;
return this.replace(/{(\d+)}/g, function (match, number) {
return typeof args[number] != 'undefined' ? args[number] : match;
});
};
和formatMoney
:
function formatNumber(num) {
if (num == 'NaN') return '-';
if (num == 'Infinity') return '∞';
num = num.toString().replace(/\$|\,/g, '');
if (isNaN(num))
num = "0";
sign = (num == (num = Math.abs(num)));
num = Math.floor(num * 100 + 0.50000000001);
cents = num % 100;
num = Math.floor(num / 100).toString();
if (cents < 10)
cents = "0" + cents;
for (var i = 0; i < Math.floor((num.length - (1 + i)) / 3) ; i++)
num = num.substring(0, num.length - (4 * i + 3)) + ',' + num.substring(num.length - (4 * i + 3));
return (((sign) ? '' : '-') + num + '.' + cents);
}
function formatMoney(num) {
return '$' + formatNumber(num);
}