delphi - 减少绘制的TChart点数

标签 delphi teechart

我的TChart通过series.AddXY方法添加了很多点。每秒添加一个点(但是也可能长时间没有数据)。更改图表(添加点)后,当我转到带有图表的选项卡时,大约需要5秒钟才能重新绘制。

我认为使用聚合函数将有助于更快地绘制图表:

ser1: TFastLineSeries;
ser2: TPointSeries;
ser3: TFastLineSeries;
utc: TDateTime;

ser1.SetFunction(TAverageTeeFunction.Create(Self));
ser1.FunctionType.Period := 100;
ser1.FunctionType.PeriodStyle := psRange;

ser2.SetFunction(TAverageTeeFunction.Create(Self));
ser2.FunctionType.Period := 100;
ser2.FunctionType.PeriodStyle := psRange;

ser3.SetFunction(TAverageTeeFunction.Create(Self));
ser3.FunctionType.Period := 100;
ser3.FunctionType.PeriodStyle := psRange;

for i := 0 to 30000 do begin
   .....
   ser1.AddXY(utc, 0, utcStr);
   ser2.AddXY(utc, deviation, utcStr);
   ser3.AddXY(utc, trend, utcStr);
   .....
end;


但是它和以前一样慢。

如何更快地绘制图表?

更新资料

这是3小时数据的不可缩放图表。 “ Now”在右边缘,“-3h”在左边缘。点不断到达右侧,并从左侧删除。通过设置chart.BottomAxis.Minimumchart.BottomAxis.Maximum属性来移动视框。我对AVG绘图感到满意,其中平均数量是图表上像素的水平数量。

最佳答案

我舍入了DateTime值

axisTimestamp := Trunc(timestamp * 40000) / 40000;


然后使用此值设置图表点。

如果存在带有此类XValue的点,则我将计算平均值:

if series.XValue[i] = axisTimestamp then
    series.YValue[i] := (series.YValue[i] + newValue) / 2;

关于delphi - 减少绘制的TChart点数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51020164/

相关文章:

delphi - 是否可以向 Delphi 的 TButtonedEdit 添加历史列表下拉列表?

delphi - 在运行时创建系列时,系列未显示在 TeeChart 中?

delphi - Delphi 中的自定义控件创建

德尔福ADO : necessary to clean up parameters?

delphi - 创建面积图,用其他颜色为溢出值的部分着色

c++ - MFC TeeChart中绘制饼图

delphi - 获取 TChart 中 XY 点的 TChartSeries

delphi - 如何检测 float 控件是否关闭?

delphi - 从delphiXE使用pchar参数调用delphi 2006 dll