You must be logged in to post your query.
Home › Forums › Feature Requests & Feedback › SOLUTION: Show missing points in tooltip
Tagged: tooltip missing datapints
Some time ago I asked in ‘toolTip‘ a question for the possibility to show “missing datapoints” in the tooltip.
I understood that was not possible. But I made “the impossible possible” with the ‘contentFormatter’ in toolTip:
Somewhere in your code (near the render):
var dataPointsNameNumber = new Object();
for (var i = 0; i < chart.options.data.length; i++) {
dataPointsNameNumber[chart.options.data[i].name] = i;
}
In your toolTip:
contentFormatter: function ( e ) {
var content = '<div style="width: 100%; font-weight: bold; text-align: right;">'
+CanvasJS.formatDate(e.entries[0].dataPoint.x, "DDD DD-MM-YY HH:mm",chart.options.culture)
+'</div><table>';
var dataPoints = new Object();
for (var i = 0; i < e.entries.length; i++) {
dataPoints[ e.entries[i].dataSeries.name ] = e.entries[i].dataPoint.y;
}
var content_p = '';
for (var i = 0; i < chart.options.data.length; i++) {
var x1 = 0;
var x0 = 0;
var y1 = 0;
var y0 = 0;
var ii = 0;
var ii_start = 0;
if( document.getElementById("xData"+i) ) { // to speed up the search!
ii_start = document.getElementById("xData"+i).innerHTML-2;
if (ii_start < 0 ) { ii_start = 0 }
}
if (typeof(dataPoints[ chart.options.data[i].name ]) == 'undefined') {
for (ii = ii_start; ii < chart.options.data[i].dataPoints.length; ii++) {
x0 = x1;
y0 = y1;
x1 = chart.options.data[i].dataPoints[ii].x;
y1 = chart.options.data[i].dataPoints[ii].y;
if (x1 > e.entries[0].dataPoint.x) {
content_p+= "<p id='xData"+i+"' style='display:none;'>"+ii+"</p>"; // to speed up the search!
break;
}
}
if (x0 && x1
&& x1 > e.entries[0].dataPoint.x ) {
var delta = (x0.getTime() - e.entries[0].dataPoint.x.getTime()) / (x0.getTime() - x1.getTime());
dataPoints[ chart.options.data[i].name ] = y0+delta*(y1-y0);
}
}
if (typeof(dataPoints[ chart.options.data[i].name ]) != 'undefined') {
content += "<tr><td>"
+"<span style=\"color: " +chart.options.data[i].color + ";\">■</span>"+" "
+chart.options.data[i].name
+"</td><td style=\"text-align: right; padding-left: 5px;\">"
+CanvasJS.formatNumber(dataPoints[ chart.options.data[i].name ],'#,###',chart.options.culture)
+"</td></tr>";
}
}
content += "</table></div>"
+"<p id='xData' style='display:none;'>"+ e.entries[0].dataPoint.x+ "</p>"+content_p;
return content;
}
Slight improvement, On large datasets the “search speed up” doesn’t work right.
Change this section:
if( document.getElementById("xData"+i) ) { // to speed up the search!
ii_start = document.getElementById("xData"+i).innerHTML-2;
if (ii_start < 0 ) { ii_start = 0 }
}
if (typeof(dataPoints[ chart.options.data[i].name ]) == 'undefined') {
with:
if (typeof(dataPoints[ chart.options.data[i].name ]) == 'undefined' ) {
if( document.getElementById("xData"+i) ) { // to speed up the search!
ii_start = parseInt(document.getElementById("xData"+i).innerHTML);
if (ii_start > 0 ) {
while (ii_start > 0
&& e.entries[0].dataPoint.x.getTime() - chart.options.data[i].dataPoints[ii_start].x.getTime() < 0) {
ii_start = parseInt(ii_start*.9)-6;
}
}
ii_start-= 6;
if (ii_start < 0 ) { ii_start = 0 }
}
Eesger,
Thanks for the posting the solution. It would help others who will be searching for the similar.
Tagged: tooltip missing datapints
You must be logged in to reply to this topic.