我是快速发展的新手。我最近使用CorePlot帮助我实时从传感器中提取ECG数据。传感器的采样率为250点/秒。首先,我读取每5个点绘制一次然后刷新视图,直到散射填充视图(大约1000点)。但我发现效率低下,数据会丢失。
之后我看到我可以通过使用-insertDataAtIndex:numberOfRecords
插入更新点来更改图形。我在CorePlot中引用了RealTimePlot示例,但我不知道在Swift中如何做到这一点。你能告诉我Swift中的RealTimePlot示例还是告诉我该怎么做?
请帮我。
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:
方法中。该演示使用计时器定期调用此方法,但您可以从任何地方提供新数据,例如来自传感器设备的回调或委托。
这些是要遵循的基本步骤:
ecgDataForPlot
)中删除它们。如果您希望用户能够滚动回历史记录,您可以保留它们。该演示不需要保留旧数据,因为它会自动滚动,并且无法返回并查看过去的数据。ecgDataForPlot
)。-insertDataAtIndex:numberOfRecords:
告诉图表加载新数据。该演示总是在现有数据集的末尾添加新数据,这对于时间序列是有意义的,但您可以在任何地方插入新数据。