2017-02-13 108 views
0

這是一個比其他任何內容更開放的討論主題。目前,我在刷新我的CPTPlot *plot之前在我的NSMutableArray *voltageArray中存儲了50個Float32值。每次獲得50個值時,我從voltageArray中刪除前50個並重復該過程....始終在我的圖上「實時」顯示50個值。但是,我收到的數據(來自裝有壓力傳感器的賽普拉斯BLE模塊的電壓)非常快,以至於無法實現任何變化(0.4 V至4.0 V;沒有大量壓力的壓力)在我的圖表上看到。它顯示爲一條直線,上下變化而不顯示斜坡的增加或減少。CorePlot - 使用兩個陣列的動態x軸數據

爲了顯示整體變化,我想將這50個值存儲在另一個NSMutableArray *stampArray的第一個索引中,並使用索引stampArray來顯示信息。同時,numberOfRecordsForPlot:方法是這樣的:

- (NSUInteger)numberOfRecordsForPlot:(CPTPlot *)plotnumberOfRecords { 
    return (DATA_PER_STAMP * _stampCount); 
} 

這最初是50,再經過數據的50個從BLE模塊捕獲,_stampCount會加一,並記錄爲情節數量將增加50(直到2500-10000範圍內,然後我刷新整個事情並重新啓動過程。)

這是正確的方法嗎?我如何能夠將第一個50分留在圖上,而建立下一個50分等?想象一下y = x^2圖表,以及應用積分時的圖形(整個將曲線下的區域分解爲矩形)。

回答

0

查看繪圖庫中的「實時繪圖」演示 Core繪圖包含的示例應用程序。它從一個空的圖表開始,每個週期添加一個新點,直到達到最大點數。之後,每增加一個新點就刪除一箇舊點,這樣總數就保持不變。該演示使用計時器將隨機數據傳遞到情節,但您的應用程序當然可以從任何地方收集數據。一定要始終與主線程中的圖表交互。

我懷疑你可以在一個圖表上顯示10000個數據點(你的顯示器是否有足夠的像素來解決這麼多問題?)。否則,如果您在將數據發送到繪圖前過濾和/或平滑數據以刪除某些點,則會獲得更好的繪圖性能。

+0

感謝您的迴應,而這正是我所追求的。 2500-10000是未受過教育的估計;如果大於1000,那麼性能會比「<1000」路線起作用。關於Plot Gallery,我應該查看哪些特定的類/方法來查看添加和刪除點數?我對此很陌生,所以我仍然試圖讓自己的頭腦清醒。 –

+0

查看'RealTimePlot.m'中的'-newData:'。 –

+0

太棒了,看起來很簡單。 Grazie –