TeeChart Pro VCL/FMX教程(六):使用系列(二)

下载TeeChart Pro VCL/FMX最新版本

在图表上混合系列类型

    TeeChart Pro提供了一个空的Chart Canvas作为数据系列的背景。这意味着没有预定义图表类型。您可以将所需的图表类型定义为要显示的系列类型的混合。由于某些系列类型的特殊性质,在图表上混合使用一些系列类型是不切实际的。当您添加新系列时,TeeChart会通过在图表库中显示不适合的系列类型来帮助您。您可以在一个图表中放置的系列数量没有实际限制。

添加新系列

    使用图表编辑器(参见教程1)或按代码添加系列。

procedure TForm1.Button2Click(Sender: TObject);
var tmpLineSeries:TLineSeries;
begin
  tmpLineSeries:=TLineSeries.Create(self);
  Chart1.AddSeries(tmpLineSeries);
  tmpLineSeries.FillSampleValues(10);
end;

选择系列的轴

    添加到图表中的系列将自动将左轴和下轴作为参考轴。您可以通过选择相关系列的“系列常规”页面来更改图表编辑器中的参考轴。有4个轴可供选择,Top,Left,Bottom和Right。通过代码,更改轴将如下所示:

With Series1 do
begin
 HorizAxis := aTopAxis;
 VertAxis := aRightAxis;
end;

    每个轴可以关联1个以上的系列。TeeChart将决定适合与Axis匹配的系列的最佳比例,但您可以自己更改Axis音阶(参见Axis Tutorial)。可以添加附加轴,它们将复制与前4个轴相对应的刻度(参见教程部分附加轴)。

连接系列

    您可以使用Series作为另一个Series的数据源。通过设置第二系列的数据源,可以使用图表编辑器完成此操作。转到“系列”选项卡“数据源”页面。选择“Function”作为数据源类型。将出现两个列表框,可用系列和选定系列。选择要用作当前系列的数据源的系列,然后在上面名为Function:的Combobox中,选择Copy作为功能类型。请注意,以这种方式,任何Series都可以定义为其他Series的函数,Function Type可以是Function组合框中可用的列表中的任何一个。要通过代码执行相同操作,请参阅下文:

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
 With Series2 do
 begin
   Datasource:=Series1;
   SetFunction(TAverageTeeFunction.Create(Self));
   FunctionType.Period := 4;
   CheckDatasource;
 end
end;

更改系列订单  

    使用图表编辑器可以非常轻松地更改系列顺序。转到编辑器的首页,突出显示要移动的系列。使用右侧的箭头按钮以系列顺序向上或向下移动系列。系列订单将决定系列在图表中相对于其他系列的相对显示位置。通过代码使用SeriesList属性或ExchangeSeries方法。

Chart1.ExchangeSeries(0, 1);  //Change Series(0) with Series(1) in the index order

    注意。交换Series后,系列的索引将被更改。因此,如果代码重新运行,上面的代码行将永久地交换2系列'0'和'1',因为0变为1,1变为0。

将系列设置为“Active:=False”将从图表中隐藏系列,但保持其数据内容不变。

系列value表

    TeeChart系列通过TChartValueList组件将其值存储在可访问和可修改的Valuelist中。

访问系列值

    您可以访问列表中的任何值:

ShowMessage(FloatToStr(Series1.XValues[3]));
//Displays value of 4th point (index starts at 0) in Series1

    以这种方式访问的值可用于设置系列数据的陷阱条件:

 With Series1 do
 begin
   For t := 0 To Count - 1 do
   begin
     If YValues[t] > 9 Then
       ShowMessage('Value: ' + FloatToStr(XValues[t])
       + ', ' + FloatToStr(YValues[t]) + ' exceeds limit');
   end;
 end;

    可以通过一些Series方法和几个Chart事件使用的PointIndex点获得相同的值。

procedure TForm1.Series1Click(Sender: TChartSeries; ValueIndex: Integer;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  Showmessage('ValueIndex is: ' + IntToStr(ValueIndex));
  Showmessage('Point''s Y value is: ' + FloatToStr(Sender.YValues.Value[ValueIndex]));
  Chart1.CancelMouse:=True;  //Use CancelMouse to prevent Zoom event activating
end;

    单击3D系列时,只有前平面上的单击才会被识别为系列单击。

使用值的示例

    此代码根据用户的鼠标单击修改BarSeries Bar的值。

//Use the OnClickSeries or OnClickBackground event to determine where the user has clicked.procedure TForm1.Chart1ClickBackground(Sender: TCustomChart;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
If (Int(Chart1.Axes.Bottom.CalcPosPoint(X)) > -1) Then
  Case Ord(Button) of
  0 : UpdatePoint(Chart1.Axes.Bottom.CalcPosPoint(X), Chart1.Axes.Left.CalcPosPoint(Y));
  end;
end;

procedure TForm1.Series1Click(Sender: TChartSeries; ValueIndex: Integer;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  UpdatePoint(ValueIndex, Chart1.Axes.Left.CalcPosPoint(Y));
  Chart1.CancelMouse:=True;  //Use CancelMouse to prevent Zoom event activatingend;

    在这两种情况下,请调用UpdatePoint Sub例程来修改Bar的值:

Procedure TForm1.UpdatePoint(Bar, Y : Double);
begin
  If Round(Bar) < Series1.Count Then
  begin
    Series1.YValues[Round(Bar)] := Int(Y);
    Chart1.refresh;
  end;
end;

购买TeeChart Pro VCL/FMX正版授权,请点击“咨询在线客服”哟!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章