2013-02-12 88 views
2

我試圖以漸進方式向圖表添加新點。添加新點並設置新的最小/最大值後,工具提示標籤顯示不正確。HighCharts.StockChart工具提示懸停數據點不正確

小提琴:http://jsfiddle.net/aAFLX/

$(function() { 
    Highcharts.setOptions({ 
     global : { 
      useUTC : false 
     }, 
     scrollbar:{ 
      enabled: true 
     }, 
     lang: { 
      rangeSelectorZoom: ' ' 
     } 
    }); 

    var dataPoints = [[1293820200000, 45], [1293733800000, 25], [1293647400000, 65]] 
    var counter = 0; 

    var chart = new Highcharts.StockChart({ 
     chart: { 
      renderTo: 'container' 
     }, 
     rangeSelector: { 
      enabled: false 
     }, 
     navigator: { 
      enabled: false 
     }, 
     scrollbar : { 
      enabled : false 
     },   
     yAxis: { 
      min: 0, 
      max: null 
     }, 
     xAxis: { 
      type: 'datetime', 
      linecolor: '#bbccdd', 
      gridLineColor:'#bbccdd', 
      tickInterval: 86400000, 
      min: 1293820200000, 
      max: 1294079400000 
     }, 
     series: [{ 
      name: 'Count', 
      data : [[1293906600000, 56]], 
      type : 'column', 
     }] 
    }); 

    $('#button').click(function() { 
     if(counter == dataPoints.length) { 
      return; 
     } 
     var point = dataPoints[counter++]; 
     var d = new Date(point[0]); 
     var min = d.setDate(d.getDate() - 1); 

     chart.xAxis[0].setExtremes(min,null); 
     chart.series[0].addPoint(point); 
    }); 
}); 

任何想法有什麼不好?我錯過了一些東西,或者錯誤地使用了API?

回答

1

Highstock不會自動對輸入數據進行排序,所以在給Highstock時必須對其進行排序。我認爲這是造成問題的原因。

因此,添加新點時,添加的點必須晚於上一個點。

我已經整理數據點修改您的jsfiddle

dataPoints.sort(function (a, b) { 
    return a[0] - b[0]; 
}); 

和移動第一點往回趕。 (也刪除了setExtremes的調用以保持所有點都在視圖中,但是沒有連接到問題)。

+0

在我的情況下,批量檢索的數據和它的降序。例如batch1 = [[2-Jan-2013,25],[1-Jan-2013,45]],batch2 = [[31-Dec-2012,65],[30-Dec-2012,7]]。另外,我希望在第一批後立即渲染圖表,以便漸進渲染。根據你的回答,似乎在不重新渲染整個圖表的情況下無法實現這一點。你能否提出更好的建議或者是否有支持這種情況的庫? – user2064553 2013-02-12 13:26:45

+0

是的,如果數據未排序,您需要重新渲染圖表。恐怕我不知道任何其他解決方案 – eolsson 2013-02-12 13:44:08