2012-02-14 56 views
3

我想創建一個簡單的flot線圖並在定時器上更新它,我只想顯示最後10個點的數據。但我只能看到軸而不是圖形圖。另外,我看到x軸隨着額外的數據而改變,但是y軸保持不變並且不對應於附加數據。我的代碼如下:簡單的flot圖不更新

var dataSet = []; 
var PlotData; 
var x = 0; 
var y = 0; 
var plot = null; 

function EveryOneSec() 
{ 
    if (dataSet.length == 10) 
    { 
     dataSet.shift(); 
    } 
    x++; 
    y += 2; 
    dataSet("[" + x + ", " + y + "]"); 

    PlotData = { label: "line 1", data: [ dataSet ], color: "green" }; 

    if (plot == null) 
    { 
     plot = $.plot($("#placeholder"), [ PlotData ], { lines: {show: true}, points:   {show: true}}); 
    } 
    else 
    { 
     plot.setData([ PlotData ]); 
     plot.setupGrid(); 
     plot.draw(); 
    } 
    setTimeout(EveryOneSec, 1000); 
} 

我已經使用和不調用setupGrid(試過),但這使得於軸線顯示器或圖形情節沒有差別。即使x正在遞增,x軸停止變化,當我得到0至9的滴答時,y軸保持靜態。我相信代碼在傳遞數據數組方面是正確的,那爲什麼圖不出現?

回答

2

好的,這裏有兩個問題。

首先,您沒有正確追加到dataSet。我不確定你得到的語法是什麼,但是在陣列的每個插槽中需要的是[x,y],您可以使用Array.push來實現。

此:

dataSet("[" + x + ", " + y + "]"); 

應該是這樣的:

dataSet.push([x , y]); 

當您創建一系列對象PlotData,你並不需要存儲另一個陣列的內部數據,以便代替這個:

PlotData = { label: "line 1", data: [ dataSet ], color: "green" }; 

你需要這樣的:

PlotData = { label: "line 1", data: dataSet , color: "green" }; 

看到它在這裏工作:http://jsfiddle.net/ryleyb/qJEXH/

+0

感謝您的幫助。現在工作了 – 2012-02-15 15:08:17