2016-11-22 34 views
0

我想在圖表中顯示一些數據。大小約爲200k數據點x16 - 這是堆棧值。我希望這個圖書館能夠及時呈現這些數據。CanvasJs,更新數據

該數組看起來像:[16] [250000],其中外部數組是堆積值,內部包含數據。 [n] [m] = {x:1 ... 250000,y:0 ... 1}。如果我有[1] [7000] = {x:7000,y:data}或[12] [7000] = {7000,y:otherData} - >這將被堆疊。

數據將僅在用戶交互後加載。

我現在的問題是我無法用數據填充圖形。我見過http://canvasjs.com/docs/charts/basics-of-creating-html5-chart/updating-chart-options/

代碼:

<script type="text/javascript"> 
    dataPoints = []; //or: dataPoints ={}; 
    window.onload = function() { 
     chart = new CanvasJS.Chart("chart", 
       { 
        title: { 
         text: "asdf" 
        }, 
        data: [{ 
         type: "stackedColumn", 
         dataPoints: dataPoints 
        }] 
       }); 

     chart.render(); 
    } 
    function update(data) { 
     //or: dataPoints=[[],[]]; 
     var size= data[0].length; 
     var outer= data.length; 
     for (i= 0; i< outer; i++) { 
      for (j= 0; j< size; j++) {     
       dataPoints[i][j].push({y: data[i][j].y}); //here is the error 
       console.log(data[i][j].y); 
      } 

     } 
    chart.render(); 
    } 

不管我怎麼做,我會得到一個未定義的 「 」「 X/Y/0的不能設置屬性」。我知道它與數組初始化有關,並且已經嘗試過各種方法,但是我沒有得到如何正確地初始化它以便稍後填充數據(並且我不知道將有多少數據來)。一旦它有問題已經在(0,0),然後當它「去(1,0)。

第2)有人可以給我一個建議如何我可以減少加載的數據?如果我做了一些測試,速度非常慢,可能會出現1.000.000 x 16的數據點(如http://canvasjs.com/docs/charts/chart-options/range-changing/,崩潰時間大於2.000.000),尤其是像同步,縮放和平移等交互。

回答

2

數據應該包含dataSeries的陣列,其應該在對象的形式。 這dataSeries應包含的數據點應再次在對象的形式。

var myData = []; 
function update() { 
    var size= data[0].length; 
    var outer= data.length; 
    for (i= 0; i< outer; i++) { 
     var dataSeries = []; 
     for (j= 0; j< size; j++) { 
      dataSeries.push({y: data[i][j]}); 
     } 
     myData.push({type: "stackedColumn", dataPoints: dataSeries}); 
    } 
    chart.render(); 
} 

一旦用戶交互替換該行

data: [{ 
    type: "stackedColumn", 
    dataPoints: dataPoints 
}] 

與此

data: myData 

,並調用update()函數。