彩票走势图

TeeChart VCL实时数据图技巧(三)填充数据系列

原创|使用教程|编辑:郝浩|2013-04-28 13:20:33.000|阅读 682 次

概述:本教程就为大家提供几种,老牌图表控件TeeChart Pro VCL可以确保数据绘制速度的方法。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

相关链接:

  所谓实时数据图,就是图表中的数据与图表的生成为同一瞬间。当然这是非常理想化的,在现实中,只有提高绘图速度,尽可能减少测量和绘制数据之间的延迟,本教程就为大家提供几种,老牌图表控件TeeChart Pro VCL可以确保数据绘制速度的方法。

  以下方法都可以加快绘制实时数据图的时间:

  • 选择合适的系列类型
  • 禁用所有实时数据图不需要的花哨功能
  • 预处理数据
  • 选择合适的方法来填充数据系列

  由于预处理数据的方式太多,而且在其他地方也有很深入的介绍,我们在这里不做介绍了。

  直接进入填充数据系列,最简单的方法就是使用AddXY方法来为系列增加数据点。这种方法的一大优点是,它非常简单。如果你需要实时绘制的数据点数不超过几千个,那么AddXY方法绝对是你的首选方法。

  还有一个是TChartSeries.Delete方法,也提供了强大的实时绘制方法。接下来我们用两个例子来展示使用TeeChart实际案例中的一个实时滚动图表。

  首先例行增加一系列的数据点,然后滚动的添加新数据点并删除旧的且不必要的数据点,如下代码:

  // Adds a new random point to Series
  Procedure RealTimeAdd(Series:TChartSeries);
  var XValue,YValue : Double;
  begin
    if Series.Count=0 then  // First random point
    begin
      YValue:=Random(10000);
      XValue:=1;
    end
    else
    begin
      // Next random point
      YValue:=Series.YValues.Last+Random(10)-4.5;
      XValue:=Series.XValues.Last+1;
    end;
    // Add new point
    Series.AddXY(XValue,YValue);
  end;

  // When the chart is filled with points, this procedure
  // deletes and scrolls points to the left.
  Procedure DoScrollPoints(Series: TChartSeries);
  var tmp,tmpMin,tmpMax : Double;
  begin
    // Delete multiple points with a single call.
    // Much faster than deleting points using a loop.

    Series.Delete(0,ScrollPoints);

    // Scroll horizontal bottom axis
    tmp := Series.XValues.Last;
    Series.GetHorizAxis..SetMinMax(tmp-MaxPoints+ScrollPoints,tmp+ScrollPoints);

    // Scroll vertical left axis
    tmpMin := Series.YValues.MinValue;
    tmpMax = Series.YValues.MaxValue;

    Series.GetVertAxis.SetMinMax(tmpMin-tmpMin/5,tmpMax+tmpMax/5);

    // Do chart repaint after deleting and scrolling
    Application.ProcessMessages;
  end;

  另外一个支持增加大量数据点的方法是直接使用动态数组。下面这个例子就是这样,我们绕过了AddXY方法,直接访问系列X,Y的值,从而避免了使用AddXY方法的性能开销。

Var X,Y : Array of Double;   // TChartValues
    t   : Integer;
    Num : Integer;
begin
  { 1M points }
  Num:= 1000000;

  { allocate our custom arrays }
  SetLength(X,Num);
  SetLength(Y,Num);

  { fill data in our custom arrays }
  X[0]:=0;
  Y[0]:=Random(10000);
  for t:=1 to Num-1 do
  begin
    X[t]:=t;
    Y[t]:=Y[t-1]+Random(101)-50;
  end;

  { set our X array }
  With Series1.XValues do
  begin
    Value:=TChartValues(X);  { <-- the array }
    Count:=Num;               { <-- number of points }
    Modified:=True;           { <-- recalculate min and max }
  end;

  { set our Y array }
  With Series1.YValues do
  begin
    Value:=TChartValues(Y);
    Count:=Num;
    Modified:=True;
  end;

  { Show data }
  Series1.Repaint;

  上面这个例子中,有一个需要注意的地方,我们需要手动定义XValues.Count和YValues.Count的属性。


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn

文章转载自:慧都控件网

为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP