gpt4 book ai didi

swift - CorePlot实时绘图

转载 作者:行者123 更新时间:2023-11-28 08:50:21 27 4
gpt4 key购买 nike

我是快速开发的新手。我最近使用 CorePlot 来帮助我实时绘制来自传感器的 ECG 数据。传感器的采样率为250点/秒。起初,我每 5 个点读取一次绘制一次,然后刷新 View ,直到散点布满 View (大约 1000 个点)。但我发现这样做效率低下,数据会丢失。

后来我发现我可以使用 -insertDataAtIndex:numberOfRecords 插入更新点来更改图形。我在 CorePlot 中引用了 RealTimePlot 示例,但我不知道如何在 Swift 中执行此操作。你能给我 RealTimePlot 在 Swift 中的例子或者告诉我怎么做吗?

请帮帮我。

typealias plotDataType = [CPTScatterPlotField : Double]
private var scatterGraph : CPTXYGraph? = nil

func plotChart(ecg:[Int]){
let ecgLinePlot = CPTScatterPlot(frame: CGRectZero)
var ecgContentArray = [plotDataType]()

for i in 0 ..< ecg.count { //ecg.count=1000
let y = Double(ecg[i])/65535.0 + 0.05
let x = Double(i) * 0.1
let dataPoint: plotDataType = [.X: x, .Y:y]
ecgContentArray.append(dataPoint)
}
ecgDataForPlot = ecgContentArray

// MARK: - Plot Data Source Methods
func numberOfRecordsForPlot(plot: CPTPlot) -> UInt
{
return UInt(self.ecgDataForPlot.count)
}

func numberForPlot(plot: CPTPlot, field: UInt, recordIndex: UInt) -> AnyObject?
{
let plotField = CPTScatterPlotField(rawValue: Int(field))
if let ecgNum = self.respDataForPlot[Int(recordIndex)][plotField!]{
return ecgNum as NSNumber
}
}

最佳答案

您遵循“实时绘图”演示使用的相同过程。更新操作发生在 -newData: 方法中。该演示使用计时器定期调用此方法,但您可以从任何地方提供新数据,例如来自传感器设备的回调或委托(delegate)。

这些是要遵循的基本步骤:

  1. 如果添加新点会使总数据集大于您想要显示的内容,请从数据集开头删除旧点。从绘图和本地数据缓存 (ecgDataForPlot) 中删除它们。如果您希望用户能够滚动回到历史记录,您可以保留它们。该演示不需要保留旧数据,因为它会自动滚动并且无法返回并查看过去的数据。

  2. 更新绘图范围以包含新数据点。演示动画更改,但这部分是可选的。

  3. 将新数据点添加到本地数据缓存(ecgDataForPlot)。

  4. 调用 -insertDataAtIndex:numberOfRecords: 告诉绘图加载新数据。该演示始终在现有数据集的末尾添加新数据,这对时间序列有意义,但您可以在任何位置插入新数据。

关于swift - CorePlot实时绘图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34412720/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com