logo 【TeeChart Pro ActiveX教程】2018 我也要发布文档

【TeeChart Pro ActiveX教程】(六):使用系列(下)


下载TeeChart Pro ActiveX最新版本

将数据添加到系列

大多数系列类型(ODBC数据源教程8和函数教程7除外)使用Add和ADDXY方法添加数据。 有一些例外,请参阅下表,了解它们如何区别的示例:

Series Type Add Series points Delete Series points
     

Basic

   

Gantt

GanttSeries.AddGantt
GanttSeries.AddGanttColor

Series.Delete
Series.DeleteRange

Shape

ShapeSeries.X0,
ShapeSeries.Y0,
ShapeSeries.X1,
ShapeSeries.Y1

TChart.RemoveSeries
(Each Shape is a unique Series)

Bubble

BubbleSeries.AddBubble

Series.Delete
Series.DeleteRange

Line

Series.Add
Series.AddXY
Series.AddNull
Series.AddNullXY
Series.AddArray

Series.Delete
Series.DeleteRange

Bar

Series.Add
Series.AddXY
Series.AddNull
Series.AddNullXY
Series.AddArray

Series.Delete
Series.DeleteRange

HorizBar

Series.Add
Series.AddXY
Series.AddNull
Series.AddNullXY
Series.AddArray

Series.Delete
Series.DeleteRange

Area

Series.Add
Series.AddXY
Series.AddNull
Series.AddNullXY
Series.AddArray

Series.Delete
Series.DeleteRange

Point

Series.Add
Series.AddXY
Series.AddNull
Series.AddNullXY
Series.AddArray

Series.Delete
Series.DeleteRange

Pie

Series.Add
Series.AddNull
Series.AddArray

Series.Delete
Series.DeleteRange

Fast Line

FastLineSeries.AddRealTime
Series.Add
Series.AddXY
Series.AddNull
Series.AddNullXY
Series.AddArray

Series.Delete
Series.DeleteRange

HorizLine

Series.Add
Series.AddXY
Series.AddNull
Series.AddNullXY
Series.AddArray

Series.Delete
Series.DeleteRange

HorizArea

Series.Add
Series.AddXY
Series.AddNull
Series.AddNullXY
Series.AddArray

Series.Delete
Series.DeleteRange

3D

   

Surface

SurfaceSeries.AddXYZ
SurfaceSeries.AddArrayXYZ
SurfaceSeries.AddArrayGrid

Series.Delete
Series.DeleteRange

Contour

ContourSeries.AddXYZ
ContourSeries.AddArrayXYZ
ContourSeries.AddArrayGrid

Series.Delete
Series.DeleteRange

Waterfall

Waterfall.AddXYZ
Waterfall.AddArrayXYZ
Waterfall.AddArrayGrid

Series.Delete
Series.DeleteRange

Color Grid

ColorGrid.AddXYZ
ColorGrid.AddArrayXYZ
ColorGrid.AddArrayGrid

Series.Delete
Series.DeleteRange

Vector 3D

Vector3D.AddVector
Vector3D.AddXYZ
Vector3D.AddArrayXYZ
Vector3D.AddArrayGrid

Series.Delete
Series.DeleteRange

Tower

Tower.AddXYZ
Tower.AddArrayXYZ
Tower.AddArrayGrid

Series.Delete
Series.DeleteRange

Point3D

Point3DSeries.AddXYZ

Series.Delete
Series.DeleteRange

Triangle Surf.

TriSurface.AddXYZ
TriSurface.AddArrayXYZ
TriSurface.AddArrayGrid

Series.Delete
Series.DeleteRange

Other

   

Bar 3D

Bar3D.AddBar
Series.Add
Series.AddXY
Series.AddNull
Series.AddNullXY
Series.AddArray

Series.Delete
Series.DeleteRange

Image Bar

Series.Add
Series.AddXY
Series.AddNull
Series.AddNullXY
Series.AddArray

Series.Delete
Series.DeleteRange

Wind Rose

Series.Add
Series.AddXY
Series.AddNull
Series.AddNullXY
Series.AddArray

Series.Delete
Series.DeleteRange

Clock

None

None

Line Point

Series.Add
Series.AddXY
Series.AddNull
Series.AddNullXY
Series.AddArray

Series.Delete
Series.DeleteRange

Bar Join

Series.Add
Series.AddXY
Series.AddNull
Series.AddNullXY
Series.AddArray

Series.Delete
Series.DeleteRange

Calender

Calendar.Date

None

Big Candle

 

 

ImagePoint

Series.Add
Series.AddXY
Series.AddNull
Series.AddNullXY
Series.AddArray

Series.Delete
Series.DeleteRange

DeltaPoint

Series.Add
Series.AddXY
Series.AddNull
Series.AddNullXY
Series.AddArray

Series.Delete
Series.DeleteRange

Extended

   

Polar

PolarSeries.AddPolar

Series.Delete
Series.DeleteRange

Radar

Series.Add
Series.AddXY
Series.AddNull
Series.AddNullXY
Series.AddArray

Series.Delete
Series.DeleteRange

Arrow

ArrowSeries.AddArrow

Series.Delete
Series.DeleteRange

Bezier

Series.Add
Series.AddXY
Series.AddNull
Series.AddNullXY
Series.AddArray

Series.Delete
Series.DeleteRange

Donut

Series.Add
Series.AddXY
Series.AddNull
Series.AddNullXY
Series.AddArray

Series.Delete
Series.DeleteRange

Smith

Series.Add
Series.AddXY
Series.AddNull
Series.AddNullXY
Series.AddArray

Series.Delete
Series.DeleteRange

Pyramid

Series.Add
Series.AddXY
Series.AddNull
Series.AddNullXY
Series.AddArray

Series.Delete
Series.DeleteRange

Map

Map.Shapes.Add

Series.Delete
Series.DeleteRange

Gauge

Gauge.Value

None

Financial

   

Candle

CandleSeries.AddCandle

Series.Delete
Series.DeleteRange

Volume

Series.Add
Series.AddXY
Series.AddNull
Series.AddNullXY
Series.AddArray

Series.Delete
Series.DeleteRange

Point & Figure

PointFigure.AddOHLC

Series.Delete
Series.DeleteRange

Stats

   

Error

ErrorSeries.AddErrorBar

Series.Delete
Series.DeleteRange

Error Bar

ErrorBarSeries.AddErrorBar

Series.Delete
Series.DeleteRange

High-Low

HighLow.AddHighLow

Series.Delete
Series.DeleteRange

Histogram

Series.Add
Series.AddXY
Series.AddNull
Series.AddNullXY
Series.AddArray

Series.Delete
Series.DeleteRange

BoxPlot

BoxPlot.Median
BoxPlot.Quartile1
BoxPlot.Quartile3
BoxPlot.InnerFence1
BoxPlot.InnerFence3
BoxPlot.OuterFence1
BoxPlot.OuterFence3

TChart.RemoveSeries
(Each BoxPlot is a unique Series)

Horizontal BoxPlot

BoxPlot.Median
BoxPlot.Quartile1
BoxPlot.Quartile3
BoxPlot.InnerFence1
BoxPlot.InnerFence3
BoxPlot.OuterFence1
BoxPlot.OuterFence3

TChart.RemoveSeries
(Each BoxPlot is a unique Series)

Funnel

Funnel.AddSegment

Series.Delete
Series.DeleteRange

请注意,不使用Add或AddXY方法的Series,可以在系列中访问其特定于系列的数据添加方法。“as [SeriesType]”属性(例如,Series.asCandle.AddCandle中的AddCandle; Series.asGantt.AddGantt中的AddGantt))。

颜色

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

例如:

TChart1.Series(0).Add 46, "My first value", vbYellow

或者使用TeeChart常量clTeeColor,告诉TeeChart分配颜色。 TeeChart将为每个新系列选择最多16种独特且尚未使用的颜色中的一种。

例如:

TChart1.Series(0).Add 46, "My first value", clTeeColor

可以为Point添加“非颜色”,以便为ValueList中的值保留空间,而不会在Chart上显示。

例如:

TChart1.Series(0).Add 46, "My hidden value", clNone

从系列中删除数据点

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

例如:

TChart.Series(0).Delete(7) ; (8th point - Points index start at zero)

可以从系列中删除点范围:

Private Sub Command1_Click()
TChart1.Series(0).DeleteRange 5, 5 '(Deletes points 5, 6, 7, 8, & 9 from the Series)
End Sub

Private Sub Form_Load()
With TChart1
    .AddSeries scLine
    .Series(0).FillSampleValues 20
End With
End Sub

向系列添加空点
有关支持AddNull方法的系列类型列表,请参阅向系列添加数据表。 顾名思义,AddNull将为系列添加一个Null点,允许您为该点定义一个标签,但在该点处系列中断。 在Line Series的情况下,中断前的最后一个点不会连接到中断后的第一个点。 请参见Series.AddNull和Series.AddNullXY。

例如:

TChart1.Series(0).AddNull "my null value"

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

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

例如:

TChart1.AddSeries(scLine)  ' Adds a Line Series

(*注意:Microsoft在Internet Explorer中实现的VBScript不支持TeeChart Enum常量(scLine,scBar等)。您必须使用等价整数(0,1等)来添加新的Series类型。请参阅ESeriesClass 完整列表。此规则适用于使用VBscript的所有TeeChart ENum常量。

例如:

TChart1.AddSeries(0)  ' Adds a Line Series (vbscript)

系列被添加到可由Index,TChart1.Series(index)访问的SeriesList,从第一个系列的0开始。 TeeChart Pro为系列(Series1,Series2等)添加默认名称。 您可以使用Series.Title属性修改名称。
选择系列的轴
添加到图表中的系列将自动将左轴和下轴作为参考轴。 您可以通过选择相关系列的“系列常规”页面来更改图表编辑器中的参考轴。 有4个轴可供选择,Top,Left,Bottom和Right。 通过代码,更改轴将如下所示:

With TChart1.Series(0)
 .HorizontalAxis = aTopAxis
 .VerticalAxis = aRightAxis
End With

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


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

With TChart1.Series(1)
  .DataSource = "Series1"  '  Series1 es Series(0)
  .SetFunction tfCopy
End With

更改系列订单
使用图表编辑器可以非常轻松地更改系列顺序。 转到编辑器的首页,突出显示要移动的系列。 使用右侧的箭头按钮以系列顺序向上或向下移动系列。 系列订单将决定图表中系列相对于其他系列的相对显示位置。 将系列设置为“Active=False”将从图表中隐藏系列,但保持其数据内容不变。

要通过代码更改系列顺序,请使用TChart.ExchangeSeries。

TChart1.ExchangeSeries 0, 1  ' Change Series(0) with Series(1) in the index order

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

系列价值表
TeeChart系列通过ValueList接口将其值存储在可访问和可修改的Valuelist中。 有关下面概述的技术的工作示例,请参阅示例文件夹下面标题为“Interactive”的Visual Basic示例代码。

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

msgbox TChart1.Series(0).XValues.Value(3)
'Displays value of 4th point (index starts at 0) in Series0

以这种方式访问的值可用于设置Series数据的陷阱:

With TChart1.Series(0)
   For t = 0 To .Count - 1
     If .YValues.Value(t) > 900 Then
       MsgBox "Value: " & .XValues.Value(t) & ", " _
              & .YValues.Value(t) & " exceeds limit"
     End If
   Next t
End With

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

Private Sub TChart1_OnClickSeries(ByVal SeriesIndex As Long, ByVal ValueIndex As Long, ByVal Button As TeeChart.EMouseButton, ByVal Shift As TeeChart.EShiftState, ByVal X As Long, ByVal Y As Long)
If SeriesIndex = 0 Then
  MsgBox "ValueIndex is: " & ValueIndex
  MsgBox "Point's Y value is: " & TChart1.Series(SeriesIndex).YValues.Value(ValueIndex)
End If
TChart1.StopMouse  'Use Stopmouse to prevent Zoom event activating
End Sub

使用值的示例
此代码根据用户的鼠标单击修改BarSeries Bar的值。 请参阅TeeChart的Interactive Visual Basic演示。

'Use the OnClickSeries or OnclickBackground event to determine where the user has clicked.
Private Sub TChart1_OnClickBackground(ByVal Button As TeeChart.EMouseButton, ByVal Shift As TeeChart.EShiftState, ByVal X As Long, ByVal Y As Long)
If CInt(TChart1.Axis.Bottom.CalcPosPoint(X)) > -1 Then
  Select Case Button
  Case 1
    UpdatePoint CInt(TChart1.Axis.Bottom.CalcPosPoint(X)), CInt(TChart1.Axis.Left.CalcPosPoint(Y))
  End Select
End If
End Sub

Private Sub TChart1_OnClickSeries(ByVal SeriesIndex As Long, ByVal ValueIndex As Long, ByVal Button As TeeChart.EMouseButton, ByVal Shift As TeeChart.EShiftState, ByVal X As Long, ByVal Y As Long)
  UpdatePoint ValueIndex, CInt(TChart1.Axis.Left.CalcPosPoint(Y))
End Sub

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

Private Sub UpdatePoint(Bar, Y As Double)
  If Bar < TChart1.Series(0).Count Then
    TChart1.Series(0).YValues.Value(Bar) = Int(Y)
  End If
End Sub

系列活动
上一节介绍了Series事件的一些用法。 本节介绍了一些其他用途。

OnClickSeries
您可以使用OnClickSeries事件来获取有关Series的几乎所有信息(请参阅“访问系列值”一节)。

'These examples apply to a Series with Datetime data
'eg These test values may be used for the following event examples
Private Sub Command1_Click()
 TChart1.AddSeries scLine
 With TChart1.Series(0)
  .XValues.DateTime = True
  .asLine.Pointer.Visible = True
  .Marks.Visible = True
  'Here with European dateformat
  .AddXY DateValue("1/1/1999") + TimeValue("11:59:00"), 45, "", clTeeColor
  .AddXY DateValue("1/1/1999") + TimeValue("21:59:00"), 23, "", clTeeColor
  .AddXY DateValue("2/1/1999") + TimeValue("11:59:00"), 43, "", clTeeColor
  .AddXY DateValue("2/1/1999") + TimeValue("21:59:00"), 12, "", clTeeColor
  .AddXY DateValue("3/1/1999") + TimeValue("10:59:00"), 12, "", clTeeColor
  .AddXY DateValue("3/1/1999") + TimeValue("21:59:00"), 11, "", clTeeColor
  .AddXY DateValue("4/1/1999") + TimeValue("11:59:00"), 34, "", clTeeColor
  .AddXY DateValue("4/1/1999") + TimeValue("21:59:00"), 15, "", clTeeColor
  .AddXY DateValue("4/1/1999") + TimeValue("23:59:00"), 28, "", clTeeColor
  .AddXY DateValue("5/1/1999") + TimeValue("09:59:00"), 32, "", clTeeColor
  .AddXY DateValue("5/1/1999") + TimeValue("21:59:00"), 32, "", clTeeColor
 End With
 TChart1.Axis.Bottom.SetMinMax TChart1.Series(0).XValues.First, _
                               TChart1.Series(0).XValues.Last + (2 / 12)
End Sub

您可以使用此事件显示Series'Clicked'值

Private Sub TChart1_OnClickSeries(ByVal SeriesIndex As Long, ByVal ValueIndex As Long, ByVal Button As TeeChart.EMouseButton, ByVal Shift As TeeChart.EShiftState, ByVal X As Long, ByVal Y As Long)
  'The below will show the Value of the nearest Point, not the exact Axis value at the clicked X and Y.
  MsgBox ("Date is:" & Format(TChart1.Series(SeriesIndex).XValues.Value(ValueIndex), "dd/mm/yyyy hh:mm:ss") _
            & " Value is:" & TChart1.Series(SeriesIndex).YValues.Value(ValueIndex))
  TChart1.StopMouse
End Sub

或者:

Private Sub TChart1_OnClickSeries(ByVal SeriesIndex As Long, ByVal ValueIndex As Long, ByVal Button As TeeChart.EMouseButton, ByVal Shift As TeeChart.EShiftState, ByVal X As Long, ByVal Y As Long)
  'The below will show the exact Axis values at the X,Y clicked.
  MsgBox ("Date is:" & Format(TChart1.Series(SeriesIndex).XScreenToValue(X), "dd/mm/yyyy hh:mm:ss") _
             & " Value is:" & TChart1.Series(SeriesIndex).YScreenToValue(Y))
  TChart1.StopMouse
End Sub

OnGetSeriesPointerStyle
对于那些使用TChart指针的系列,您可以使用OnGetSeriesPointer事件访问和修改指针:

'Drawing an Uptriangle if the Point is higher than the last, DownTriangle if lower, etc.
Private Sub TChart1_OnGetSeriesPointerStyle(ByVal SeriesIndex As Long, ByVal ValueIndex As Long, AStyle As TeeChart.EPointerStyle)
 If ValueIndex > 0 Then
   If TChart1.Series(SeriesIndex).YValues.Value(ValueIndex) > TChart1.Series(SeriesIndex).YValues.Value(ValueIndex - 1) Then
     AStyle = psTriangle
   ElseIf TChart1.Series(SeriesIndex).YValues.Value(ValueIndex) < TChart1.Series(SeriesIndex).YValues.Value(ValueIndex - 1) Then
     AStyle = psDownTriangle
   Else
     AStyle = psDiamond
   End If
 Else
   AStyle = psDiamond
 End If
End Sub

OnGetSeriesMark
使用OnGetSeriesMark事件在运行时修改标记内容:

此代码根据相对于最后一个箭头长度的值更改Marktext也会更改。 TeeChart支持在重叠的情况下拖动标记,请参阅VB示例文件夹中的VB“移动标记”示例。

Private Sub TChart1_OnGetSeriesMark(ByVal SeriesIndex As Long, ByVal ValueIndex As Long, MarkText As String)
 If ValueIndex > 0 Then
   If TChart1.Series(SeriesIndex).YValues.Value(ValueIndex) > TChart1.Series(SeriesIndex).YValues.Value(ValueIndex - 1) Then
     MarkText = MarkText & " (Up)"
   ElseIf TChart1.Series(SeriesIndex).YValues.Value(ValueIndex) < TChart1.Series(SeriesIndex).YValues.Value(ValueIndex - 1) Then
     TChart1.Series(SeriesIndex).Marks.ArrowLength = 5
     MarkText = MarkText & Chr$(13) & "(Down)"
   Else
     TChart1.Series(SeriesIndex).Marks.ArrowLength = 25
     MarkText = MarkText & Chr$(13) & "(No change)"
   End If
 End If
End Sub

OnMouseEnterSeries和OnMouseLeaveSeries
系列活动的一个例子如下:

Private Sub Form_Load()
With TChart1
    .Aspect.View3D = False
    .AddSeries scBar
    .Series(0).FillSampleValues 10
    .Series(0).Marks.Visible = False
End With
End Sub


Private Sub TChart1_OnMouseEnterSeries(ByVal SeriesIndex As Long)
Dim clicked As Long
  clicked = TChart1.Series(SeriesIndex).GetMousePoint

  ' Show Series name and point index and value
  Label1.Caption = "Series: " + TChart1.Series(SeriesIndex).Name + _
                 "  point:" + Str(clicked) + _
                 "  value:" + Str(TChart1.Series(SeriesIndex).YValues.Value(clicked))
End Sub

Private Sub TChart1_OnMouseLeaveSeries(ByVal SeriesIndex As Long)
  Label1.Caption = ""
End Sub