0

我有一个计时器,它正在更新我的 coreplot 数据,以产生实时统计数据的错觉。当计时器触发时,它会向数组添加一个值并刷新散点图。这很好用,但是一旦我绘制了大约 10 个数据点,我想开始删除第一个点并只显示最后 10 个数据点。但是当我尝试删除一个点时,它会在彼此的顶部显示旧的和新的数据点。我不明白为什么会这样。我试图清除数组并重置它,但都无济于事。关于为什么会发生这种情况的任何想法。这是一些代码:

//START GRAPHING
  self.count = 0;
  if (numberOfPackets == 1){ //on the first packet
          [self.repeatingTimer invalidate];
          self.repeatingTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(updateArray:) userInfo:nil repeats:YES];
          self.arrayII = [[NSMutableArray alloc] init];
          [self initPlot];
   }

-(void) updateArray:(NSTimer *)timer{
    self.count++;
   // self.arrayII sources scatter plot data.
    if (self.count < [dataPacketArray count]){
        if (self.count > 5){
            [self.arrayII removeObjectAtIndex:0]; //if I don't include this it works flawlessly.
        }
        [self.arrayII addObject:[dataPacketArray objectAtIndex:self.count]];
    }
    [self.view reloadInputViews];
    [self configurePlots];
}

-(void) initPlot {
    [self configureHost];
    [self configureGraph];
    [self configurePlots];
    [self configureAxes];
}

我从本教程中得到了所有的 init plot 内容。任何帮助是极大的赞赏。

4

2 回答 2

0

我发现并不是数组把所有东西都扔掉了。散点图不会删除以前的图,而只是添加图。看起来它是相同的情节,因为它只是添加点并在旧点之上重新绘制它。一旦你删除一个点,那么他们就不会排队。然后下一个问题是你如何消除旧情节......

于 2012-11-25T07:12:05.353 回答
0

我假设该-configurePlots方法是将绘图添加到图表中的方法。不要在每次数据更改时调用该方法。使用-reloadData绘图上的方法强制它重新加载所有数据。

Plot Gallery示例应用程序中的“Real-Time Plot”显示了一种更新数据的更好方法。它会删除过期的数据点并仅添加新数据,而不是在每次更新时重新加载所有内容。只有 10 个数据点,这可能无关紧要,但如果您有更大的数据数组,则仅更新更改的数据可以提高性能。

于 2012-11-25T14:27:00.490 回答