TeeChart For VCL/FMX V2017使用教程:第六章-使用Series(序列)


内容

6.1 Series(序列)类型

Series(序列)类结构

选择一个序列类型

向序列中添加数据

从一个序列中删除数据点

向序列中添加Null(空)点

6.2 图表上混合序列类型

添加新的序列

为序列选择坐标轴

连接序列

改变序列顺序

6.3 序列值列表

访问序列值

使用值的示例


6.1 Series(序列)类型

        TChartSeries组件是所有序列类型的共同祖先。

6.1.1 Series(序列)类结构

        关于这个TeeChart组件库结构的一些背景知识,下面是对序列组件及其结构的解释。
        下面的简图显示了TeeChart序列类之间的关系。
        所有类都来源自于通用的“TChartSeries”类,因此共享“Series”属性和方法。
        其它几个泛型类派生自Series(序列)(CustomSeries、CustomBarSeries和CircledSeries),这些类以绿色高亮显示,且它们的组件不能直接用于编程,它们的特性是由它们的后代序列类型继承的。
        所有派生的序列(红色)都可以在您图表包含的TeeChart gallery(图表画廊)中访问。通过这种方式派生的TeeChart序列,允许通过一个公共的索引结构(集合)进行可编程访问。


TeeChart Pro的内部Series Class(序列类)的层次结构


在设计时使用
TChart 编辑器更容易添加序列,但是您也可以在运行时创建和添加新的和不同的系列类型到同一个图表中。
//你可以在运行时添加序列
procedure TForm1.Button2Click(Sender: TObject);
var tmpAreaSeries:TAreaSeries;
begin
  tmpAreaSeries:=TAreaSeries.Create(self);
  With tmpAreaSeries do
  begin
    ParentChart:=Chart1;
    FillSampleValues(10);
  end;
end;
        所有的 AreaSeries 属性和方法都可以用于新序列,就像在设计时创建的任何序列一样。

6.1.2 选择一个序列类型

        为图表选择一个序列类型将很大程度上取决于您对图表的需求。然而,在有些情况下,图表的选择取决于哪个序列类型支持输入变量的数量,因为需要大量的变量来绘制。下表显示了一些不同的序列类型所允许的变量的数量。在这个简短的教程中,我们没有列出TeeChart图表的所有可能的序列类型。 

序列类型

变量数量

Datasource 属性

1)      标准(Standard)

 

 

Line(线)

2

XValues, YValues, XLabel

Bar(棒)

2

XValues, YValues (called Bar), XLabel

HorizBar(水平棒)

2

XValues, YValues (called Bar), XLabel

Area(面积图)

2

XValues, YValues, XLabel

Point(点)

2

Xvalues, YValues, XLabel

Pie(饼图)

1

PieValues, XLabel

Fast Line(快速线)

2

XValues, YValues, XLabel

Horiz. Line(水平线)

2

XValues, YValues, YLabel

Horiz. Area(水平面积)

2

XValues, YValues, XLabel

Shape(形状)

4

X0 (Top), Y0 (Bottom), X1 (Left), Y1 (Right)

Bubble(气泡)

3

Xvalues, YValues, XLabel, RadiusValues

Gantt(甘特图)

3

StartValues, EndValues, AY (Y axis level), AXLabel

(标签可选地显示在y轴或标记上

2)      扩展(Extended)

 

 

Arrow(箭头)

4

StartXValues, StartYValues, XLabel, EndXValues, EndYValues

Polar(极坐标)

2

XValues, YValues, Labels (Polar has Angle and Radius)

Radar(雷达)

2

XValues, YValues, Labels (Radar has Angle and Radius)

Bezier(贝塞尔曲线)

2

XValues, YValues, XLabel

Donut(圆环)

2

Angle, YValue, Labels

Smith(史密斯图)

2

Resistance, Reactance, Labels

Pyramid(棱锥)

3

XValues, YValues, XLabel, ErrorValues

3)      金融(Financial)

 

 

Candle (蜡烛线)

5

OpenValues, CloseValues, HighValues, LowValues, DateValues

Point & Figure(点数图)

5

OpenValues, CloseValues, HighValues, LowValues, DateValues

Volume(容量图)

2

XValues, YValues (VolumeValues), XLabel

4)      统计(Stats)

 

 

Histogram(直方图)

2

Xvalues, YValues, XLabel

Error Bar(误差棒)

3

XValues, YValues, XLabel, StdErrorValues

Error(误差)

3

XValues, YValues, XLabel, StdErrorValues

High-Low(高低图)

3

XValues, YValues, XLabel, LowValues

Box Plot(箱形图)

3

XValues, SamplesValues, Label

Horizontal Box Plot(水平箱形图)

3

XValues, SamplesValues, Label

Funnel(漏斗)

3

XValues, QuoteValues, OpportunityValues, XLabel

5)      3D

 

 

Surface(曲面)

3

Xvalues, YValues, ZValues

Contour(等高线)

3

XValues, YValues, ZValues, XLabel

Waterfall(瀑布)

3

Xvalues, YValues, ZValues

ColorGrid(颜色格)

3

XValues, YValues, ZValues

Tower(塔)

3

XValues, YValues, XLabel, ZValues

Point3D(3D点)

3

XValues, YValues, XLabel, ZValues

Triangle Surf.(三角形曲面)

3

Xvalues, YValues, ZValues

6)      Other(其它)

 

 

Clock(时钟)

2

Angle, YValues, Labels

Line Point(点线图)

2

XValues, YValues, XLabel

Bar Join(棒连接)

2

Xvalues, YValues, XLabel

Bar3D(3D棒)

3

XValues, YValues, YStartPoint, XLabel

WindRose(风玫瑰图)

2

Angle, YValues, Labels

Calendar(日历)

2

XValues, YValues, Labels

7)      Gauges(仪表)

 

 

Gauge(仪表)

1

Value

        标签可用于扩展2个变量序列类型的值。请参见下面的示例,该示例使用了相同图表中的Bar序列类型的3个实例。

         示例:

        使用Bar序列类型

产品代码

生产数量

10

Jan

300

10

Feb

325

10

Mar

287

12

Jan

175

12

Feb

223

12

Mar

241

14

Jan

461

14

Feb

470

14

Mar

455












        在最简单的形式下,数据生成如下图表,按月分组:


             或者是 (按产品分组):


        我们在上面的表中添加了新的值(存货)后如下表。

产品代码

生产数量

存货水平

10

Jan

300

600

10

Feb

325

715

10

Mar

287

676

12

Jan

175

245

12

Feb

223

270

12

Mar

241

315

14

Jan

461

800

14

Feb

470

755

14

Mar

455

835


        存货的数值通常高于月产量,所以显示它们,给出了下面的图表(这次是2D)。该图表使用Line Series(线序列)来区分存货。


6.1.3 向序列中添加数据

        大多数序列类型(除了ODBC数据源教程8和函数教程7)都使用Add和ADDXY方法来添加数据。有一些例外,请参见下面的表格,以说明它们的区别:

 

序列类型

添加序列点

删除序列点

 

 

 

标准序列类型

 

 

Line(线)

Series.Add

Series.AddXY

Series.AddNull

Series.AddNullXY

Series.Delete

Series.Clear

Horiz Line(水平线)

Series.Add

Series.AddXY

Series.AddNull

Series.AddNullXY

Series.Delete

Series.Clear

Fast Line(快速线)

Series.Add

Series.AddXY

Series.AddNull

Series.AddNullXY

Series.Delete

Series.Clear

Bar(棒)

Series.Add

Series.AddXY

Series.AddNull

Series.AddNullXY

Series.Delete

Series.Clear

HorizBar(水平棒)

Series.Add

Series.AddXY

Series.AddNull

Series.AddNullXY

Series.Delete

Series.Clear

Area(面积)

Series.Add

Series.AddXY

Series.AddNull

Series.AddNullXY

Series.Delete

Series.Clear

Point(点)

Series.Add

Series.AddXY

Series.AddNull

Series.AddNullXY

Series.Delete

Series.Clear

Pie(饼)

Series.Add

Series.AddNull

Series.Delete

Series.Clear

Arrow(箭头)

ArrowSeries.AddArrow

Series.AddNull

Series.AddNullXY

Series.Delete

Series.Clear

Bubble(气泡)

BubbleSeries.AddBubble

Series.AddNull

Series.AddNullXY

Series.Delete

Series.Clear

Gantt(甘特图)

GanttSeries.AddGantt

GanttSeries.AddGanttColor

Series.Delete

Series.Clear

Shape(形状)

ShapeSeries.X0,

ShapeSeries.Y0,

ShapeSeries.X1,

ShapeSeries.Y1

TChart.RemoveSeries (TCustomAxisPanel)

(每个形状都是一个独一无二的系列)

Colour

        在添加点时,可以手动添加颜色

        示例:Series1.Add(46,'My first value', clYellow);

        另一种选择是使用TeeChart常量clTeeColor,告诉TeeChart图表来分配颜色。在每一个新序列中,TeeChart将选择最多16种独特的、尚未使用的颜色。

        示例:Series1.Add(46, 'My firstvalue', clTeeColor);

6.1.4 从一个序列中删除数据点

        使用Series.Delete从一个序列中删除一个点。

        示例:Series1.Delete(7); //(第8点--点索引从0开始)

        Series.Clear从一个序列中清除所有点。

6.1.5 向序列中添加Null(空)点

 

请参见表向序列中添加数据,此表是为一个支持AddNull方法的序列类型的列表。正如名称所示,AddNull将为该系列添加一个空点,允许您为该点定义一个标签,但在该序列中的那个点的位置留下一个间断。在线序列的情况下,间断前的最后一点不会连接到间断后的第一个点。参看到Series.AddNull

示例:Series1.AddNull('my nullvalue');


6.2 在图表中混合序列类型

        TeeChart Pro向数据序列提供了一个空白的图表画布作为背景。这意味着没有图表类型被定义。您可以将需要显示的图表类型定义为各种序列类型的组合。由于某些序列类型的特殊性,一些序列类型在一个图表上进行组合是不切实际的。当你要添加一个新序列的时候,TeeChart会帮助你将图表画廊中不适合的序列类型变成灰色。可以在图表上放置的序列数量没有限制。

6.2.1 添加新的序列

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

        示例:

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

6.2.2 为序列选择坐标轴

添加到图表中的序列将自动地把左侧和底部坐标轴作为它们的参考坐标轴。您可以在图表编辑器中通过选择Series General(序列常规)页面来更改相关序列的参考轴。有4个轴可用,顶、左、底和右。通过代码,改变坐标轴是这样的:

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

        超过1个序列可以与每个轴相关联。在这个系列中,TeeChart将决定最佳的刻度来匹配坐标轴,但是你可以自己改变轴的刻度(见坐标轴教程)。可以添加额外的轴,它们将复制与他们对应的第一序列的4个轴相关联的比例(请参阅教程部分额外的坐标轴)。

6.2.3 连接序列

        您可以使用一个序列作为另一个序列的数据源。通过为第二个序列设置数据源,可以使用图表编辑器完成这一操作。转到Series(序列)选项卡,Datasource(数据源)页面。选择Function函数)作为数据源类型。两个列表框将出现,可用的序列和选择的序列。选择您希望用作本序列数据源的序列,然后,在上面的Combobox(组合框)中,标题为Function:(函数:),选择Copy(复制)作为函数类型。请注意,以这种方式,任何序列都可以定义为其他序列的函数,函数类型可能是函数组合框中可用的列表中的任意一个。按照下面的代码做同样的事情:

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

        有关如何使用TeeChart函数的更多信息,请参见教程7—使用函数

6.2.4 改变序列顺序

        在图表编辑器中改变序列顺序是非常容易的。转到编辑器的首页,高亮显示你想要移动的序列。使用右边的箭头按钮在序列中上下移动序列顺序。序列顺序将决定本序列的相对显示位置。通过代码使用SeriesList属性或ExchangeSeries方法。

        示例: Chart1.ExchangeSeries(0,1);  //Change Series(0) with Series(1) inthe index order

        *请注意。交换序列之后,该序列的索引将被更改。因此,如果代码重新运行,那么上面的代码将永远交换2个系列的“0”“1”,因为0变成了1,而1变成了0

        将一个序列设置为“Active:=False”将把该序列从图表中隐藏,但保持其数据内容的完整性。

6.3  序列值列表

    TeeChart列产品将其值存储在可访问的值列表中,并可通过TChartValueList组件进行修改。

6.3.1 访问序列值

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

        示例:  ShowMessage(FloatToStr(Series1.XValues[3]));   // Series1 中显示第 4 点的值 ( 索引从 0 开始 )

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

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;

        同样的值可以通过一些序列方法和几个图表事件所使用的点ValueIndex来获得。

        示例:

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;  //使用CancelMouse来防止缩放事件激活
end;

        注意,当点击3D序列时,只有在前平面上的点击才会被识别为序列的点击。

6.3.2 使用值的例子

        这个代码根据用户的鼠标操作修改了一个BarSeries条的值。

        示例:

//使用OnClickSeries或OnClickBackground事件来确定用户点击的位置。
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;  //使用CancelMouse来防止缩放事件激活
end;

        在这两种情况下,调用UpdatePoint子例程来修改该条棒的值:

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

第六章 完



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值