2016-11-22 77 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()函数。