2011-01-22 199 views
3

頂帖子:我接受​​了一個答案,但它不適用於我。我將發佈a new question,強調德爾福7感謝所有誰給了一些很好的輸入大TChart需要很長時間繪製


我每隔一秒了一個多小時進行測量。

我有一個先前的問題,它需要45秒來更新一個TStringGrid,並設法讓它「比眼睛能看到的更快」。部分地通過移動循環的一些計算和數據庫相關功能,但是 - 令人驚訝的是,實際上改變了的變化是在循環之前將strindgrid的rowCount設置爲3600,而不是在循環內增加它。

現在我有一個TChart類似的問題。也許如果我嘗試預先分配圖表?所以,我可以Chart1.Series[0].Count := 3600,但比我不能使用AddXy()Add(),那麼我將如何顯式設置值的系列?

我有一個非常簡單的圖表,與漂浮在y軸和小時:在x軸秒

誰能幫助,或建議另一種方式來加快圖表繪製?


更新:幾個建議使用TFastLineSeries,但我不知道如何。

啊哈 - 在圖表雙擊,可顯示所有系列中,選擇一個&點擊變化

+1

我的TCharts通常在眨眼間畫出100,000點。你想告訴我們更多關於你的TCharts的信息嗎? – 2011-01-22 12:30:16

+0

+1謝謝,這告訴我,有希望:-)我只有多達3600浮點數,0和600之間的數值和標籤X軸與MM:SS時間 – Mawg 2011-01-22 14:12:54

+1

我會有興趣瞭解更多關於任何東西你/任何人都可能知道這一點。我有類似的情況。我們的系統通常(直到最近)都部署在Windows XP系統上。大量的點非常快速地沒有任何問題。我的Windows 7系統上的相同數據集非常慢。慢到我可以看到每行被單獨繪製的點,並且由於最大值/最小值而需要重新縮放一部分圖表時,我可以看到所有的重新縮放。試圖尋找答案 – PoultrySlave 2014-02-28 22:34:27

回答

4

我設法得出的數據點millons關於快速製圖「官方」的建議眨眼之間。以下是我的工作方式: 您可以做的是爲X和Y值創建兩個數組,將它們填充到您的值中,然後將這些數組填充到圖表中。例如:

var 
    XValues, YValues: array of double; 
begin 

    SetLength(XValues, numberofValues); 
    SetLength(YValues, numberofValues); 

    for ix := 0 to numberofValues - 1 do 
    begin 
    XValues[ix] := ...your values 
    YValues[ix] := ...your values 
    end; 

    Chart.Series[0].XValues.Value := TChartValues(XValues); 
    Chart.Series[0].XValues.Count := high(XValues); 
    Chart.Series[0].XValues.Modified := true; 
    Chart.Series[0].YValues.Value := TChartValues(YValues); 
    Chart.Series[0].YValues.Count := high(YValues); 
    Chart.Series[0].YValues.Modified := True; 

什麼也加快了繪圖使用TFastLineSeries,而不是常規TLineSeries。當使用FastlineSeries時,你也有屬性DrawAllPoints。設置爲false時,繪圖更快。然後TChart將跳過與屏幕上其他數據點共享相同X位置的數據點。這隻會說明這些的第一點。

這就是你找到它的DrawAllPoints選項:alt text

2

我只是想對邁克爾Schmooks答案發表評論。使用High(XValues)設置系列的Count值會導致數組中的最後一項不顯示。這是因爲高(XValues)返回數組的最高索引,而不是數組的大小。

當然,這隻有在發生非常低的nr項目時纔會被注意到。

Chart.Series[0].XValues.Count := high(XValues) + 1;