2012-02-14 57 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