2011-01-22 170 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;