Dynamic CorePlot-使用两个阵列的动态x轴数据

Dynamic CorePlot-使用两个阵列的动态x轴数据,dynamic,plot,nsmutablearray,core-plot,axis-labels,Dynamic,Plot,Nsmutablearray,Core Plot,Axis Labels,这更像是一个开放的讨论话题。目前,在刷新CPTPlot*绘图之前,我正在NSMutableArray*voltageArray中存储50个Float32值。每次我获得50个值时,我都会从电压数组中删除之前的50个值,然后重复这个过程……始终在我的绘图上“实时”显示50个值 然而,我接收到的数据(来自配备压力传感器的Cypress BLE模块的电压)非常快,在我的图表上看不到任何变化(0.4 V到4.0 V;很多压力都没有压力)。它只是显示为一条直线,上下变化,没有显示增加或减少的坡度 为了显示整

这更像是一个开放的讨论话题。目前,在刷新
CPTPlot*绘图之前,我正在
NSMutableArray*voltageArray
中存储50个
Float32
值。每次我获得50个值时,我都会从
电压数组中删除之前的50个值,然后重复这个过程……始终在我的绘图上“实时”显示50个值

然而,我接收到的数据(来自配备压力传感器的Cypress BLE模块的电压)非常快,在我的图表上看不到任何变化(0.4 V到4.0 V;很多压力都没有压力)。它只是显示为一条直线,上下变化,没有显示增加或减少的坡度

为了显示整体变化,我想获取这50个值,将它们存储在另一个
NSMutableArray*stampArray
的第一个索引中,并使用
stampArray
的索引来显示信息。同时,
numberOfRecordsForPlot:
方法如下所示:

- (NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plotnumberOfRecords {
    return (DATA_PER_STAMP * _stampCount);
}
最初是50条,然后从BLE模块捕获50条数据后,
\u stampCount
将增加1条,绘图记录的数量将增加50条(直到大约2500-10000条,然后我将刷新整个过程并重新启动该过程)

这是正确的方法吗?我怎样才能使前50个点保持在图表上,同时建立下50个点,等等。?想象一个
y=x^2
图形,以及应用积分时该图形的外观(将曲线下的整个区域分割为矩形)

查看Core Plot附带的Plot Gallery示例应用程序中的“实时绘图”演示。它从一个空图开始,每个循环添加一个新点,直到达到最大点数。之后,每增加一个新点,就删除一个旧点,这样总数保持不变。演示使用计时器将随机数据传递到绘图,但您的应用程序当然可以从任何地方收集数据。确保始终从主线程与图形交互


我怀疑您能否在一个绘图上显示10000个数据点(您的显示器是否有足够的像素来解析那么多点?)。如果没有,如果在将数据发送到绘图之前过滤和/或平滑数据以删除一些点,您将获得更好的绘图性能。

感谢您的回复,这正是我想要的。2500-10000是一个未受过教育的估计;如果任何>1000的内容会影响性能,那么使用“<1000”路线将有效。关于Plot Gallery,我应该查看哪些特定类/方法来查看点的添加和删除?我对这一点还不熟悉,所以我仍在努力了解这一切。看看
-newData:
中的
RealTimePlot.m
。太棒了,看起来很简单。Grazie还有一个后续问题:
numberForPlot:field:recordIndex:
何时被数据源调用?何时识别出绘图的实际更改?我注意到,每当我发送消息
[self.graph reloadData]
(在我捕获50个数据点之后),就会调用委托方法。就“newData:`方法而言,
numberForPlot:field:recordIndex:
何时调用?我假设在
newData:
之后设置
self.currentIndex
self.plot
属性。或者根本没有调用它?
-reloadData
方法设置一个标志,告诉绘图有新数据可用。下次核心动画系统决定重绘层时,绘图将在绘制之前加载新数据
-reloadData
导致绘图重新加载其所有数据,而
-insertDataAtIndex:numberOfRecords:
仅加载新点,而不加载现有数据。