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正版授权,请点击“”哟!