大TChart需要很长时间绘制
顶帖子:我接受了一个答案,但它不适用于我。我将发布a new question,强调德尔福7感谢所有谁给了一些很好的输入大TChart需要很长时间绘制
我每隔一秒了一个多小时进行测量。
我有一个先前的问题,它需要45秒来更新一个TStringGrid,并设法让它“比眼睛能看到的更快”。部分地通过移动循环的一些计算和数据库相关功能,但是 - 令人惊讶的是,实际上改变了的变化是在循环之前将strindgrid的rowCount设置为3600,而不是在循环内增加它。
现在我有一个TChart类似的问题。也许如果我尝试预先分配图表?所以,我可以Chart1.Series[0].Count := 3600
,但比我不能使用AddXy()
或Add()
,那么我将如何显式设置值的系列?
我有一个非常简单的图表,与漂浮在y轴和小时:在x轴秒
谁能帮助,或建议另一种方式来加快图表绘制?
更新:几个建议使用TFastLineSeries
,但我不知道如何。
啊哈 - 在图表双击,可显示所有系列中,选择一个&点击变化
我设法得出的数据点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选项:
我只是想对迈克尔Schmooks答案发表评论。使用High(XValues)设置系列的Count值会导致数组中的最后一项不显示。这是因为高(XValues)返回数组的最高索引,而不是数组的大小。
当然,这只有在发生非常低的nr项目时才会被注意到。
Chart.Series[0].XValues.Count := high(XValues) + 1;
我的TCharts通常在眨眼间画出100,000点。你想告诉我们更多关于你的TCharts的信息吗? – 2011-01-22 12:30:16
+1谢谢,这告诉我,有希望:-)我只有多达3600浮点数,0和600之间的数值和标签X轴与MM:SS时间 – Mawg 2011-01-22 14:12:54
我会有兴趣了解更多关于任何东西你/任何人都可能知道这一点。我有类似的情况。我们的系统通常(直到最近)都部署在Windows XP系统上。大量的点非常快速地没有任何问题。我的Windows 7系统上的相同数据集非常慢。慢到我可以看到每行被单独绘制的点,并且由于最大值/最小值而需要重新缩放一部分图表时,我可以看到所有的重新缩放。试图寻找答案 – PoultrySlave 2014-02-28 22:34:27