【TeeChart Pro ActiveX教程】(六):使用系列(下)
将数据添加到系列
大多数系列类型(ODBC数据源教程8和函数教程7除外)使用Add和ADDXY方法添加数据。 有一些例外,请参阅下表,了解它们如何区别的示例:
Series Type | Add Series points | Delete Series points |
Basic |
||
Gantt |
GanttSeries.AddGantt GanttSeries.AddGanttColor |
Series.Delete |
Shape |
ShapeSeries.X0, ShapeSeries.Y0, ShapeSeries.X1, ShapeSeries.Y1 |
TChart.RemoveSeries |
Bubble |
BubbleSeries.AddBubble |
Series.Delete |
Line |
Series.Add Series.AddXY Series.AddNull Series.AddNullXY Series.AddArray |
Series.Delete |
Bar |
Series.Add Series.AddXY Series.AddNull Series.AddNullXY Series.AddArray |
Series.Delete |
HorizBar |
Series.Add Series.AddXY Series.AddNull Series.AddNullXY Series.AddArray |
Series.Delete |
Area |
Series.Add Series.AddXY Series.AddNull Series.AddNullXY Series.AddArray |
Series.Delete |
Point |
Series.Add Series.AddXY Series.AddNull Series.AddNullXY Series.AddArray |
Series.Delete |
Pie |
Series.Add Series.AddNull Series.AddArray |
Series.Delete |
Fast Line |
FastLineSeries.AddRealTime Series.Add Series.AddXY Series.AddNull Series.AddNullXY Series.AddArray |
Series.Delete |
HorizLine |
Series.Add Series.AddXY Series.AddNull Series.AddNullXY Series.AddArray |
Series.Delete |
HorizArea |
Series.Add Series.AddXY Series.AddNull Series.AddNullXY Series.AddArray |
Series.Delete |
3D |
||
Surface |
SurfaceSeries.AddXYZ SurfaceSeries.AddArrayXYZ SurfaceSeries.AddArrayGrid |
Series.Delete |
Contour |
ContourSeries.AddXYZ ContourSeries.AddArrayXYZ ContourSeries.AddArrayGrid |
Series.Delete |
Waterfall |
Waterfall.AddXYZ Waterfall.AddArrayXYZ Waterfall.AddArrayGrid |
Series.Delete |
Color Grid |
ColorGrid.AddXYZ ColorGrid.AddArrayXYZ ColorGrid.AddArrayGrid |
Series.Delete |
Vector 3D |
Vector3D.AddVector Vector3D.AddXYZ Vector3D.AddArrayXYZ Vector3D.AddArrayGrid |
Series.Delete |
Tower |
Tower.AddXYZ Tower.AddArrayXYZ Tower.AddArrayGrid |
Series.Delete |
Point3D |
Point3DSeries.AddXYZ |
Series.Delete |
Triangle Surf. |
TriSurface.AddXYZ TriSurface.AddArrayXYZ TriSurface.AddArrayGrid |
Series.Delete |
Other |
||
Bar 3D |
Bar3D.AddBar Series.Add Series.AddXY Series.AddNull Series.AddNullXY Series.AddArray |
Series.Delete |
Image Bar |
Series.Add Series.AddXY Series.AddNull Series.AddNullXY Series.AddArray |
Series.Delete |
Wind Rose |
Series.Add Series.AddXY Series.AddNull Series.AddNullXY Series.AddArray |
Series.Delete |
Clock |
None |
None |
Line Point |
Series.Add Series.AddXY Series.AddNull Series.AddNullXY Series.AddArray |
Series.Delete |
Bar Join |
Series.Add Series.AddXY Series.AddNull Series.AddNullXY Series.AddArray |
Series.Delete |
Calender |
Calendar.Date |
None |
Big Candle |
|
|
ImagePoint |
Series.Add Series.AddXY Series.AddNull Series.AddNullXY Series.AddArray |
Series.Delete |
DeltaPoint |
Series.Add Series.AddXY Series.AddNull Series.AddNullXY Series.AddArray |
Series.Delete |
Extended |
||
Polar |
PolarSeries.AddPolar |
Series.Delete |
Radar |
Series.Add Series.AddXY Series.AddNull Series.AddNullXY Series.AddArray |
Series.Delete |
Arrow |
ArrowSeries.AddArrow |
Series.Delete |
Bezier |
Series.Add Series.AddXY Series.AddNull Series.AddNullXY Series.AddArray |
Series.Delete |
Donut |
Series.Add Series.AddXY Series.AddNull Series.AddNullXY Series.AddArray |
Series.Delete |
Smith |
Series.Add Series.AddXY Series.AddNull Series.AddNullXY Series.AddArray |
Series.Delete |
Pyramid |
Series.Add Series.AddXY Series.AddNull Series.AddNullXY Series.AddArray |
Series.Delete |
Map |
Map.Shapes.Add |
Series.Delete |
Gauge |
Gauge.Value |
None |
Financial |
||
Candle |
CandleSeries.AddCandle |
Series.Delete |
Volume |
Series.Add Series.AddXY Series.AddNull Series.AddNullXY Series.AddArray |
Series.Delete |
Point & Figure |
PointFigure.AddOHLC |
Series.Delete |
Stats |
||
Error |
ErrorSeries.AddErrorBar |
Series.Delete |
Error Bar |
ErrorBarSeries.AddErrorBar |
Series.Delete |
High-Low |
HighLow.AddHighLow |
Series.Delete |
Histogram |
Series.Add Series.AddXY Series.AddNull Series.AddNullXY Series.AddArray |
Series.Delete |
BoxPlot |
BoxPlot.Median BoxPlot.Quartile1 BoxPlot.Quartile3 BoxPlot.InnerFence1 BoxPlot.InnerFence3 BoxPlot.OuterFence1 BoxPlot.OuterFence3 |
TChart.RemoveSeries |
Horizontal BoxPlot |
BoxPlot.Median BoxPlot.Quartile1 BoxPlot.Quartile3 BoxPlot.InnerFence1 BoxPlot.InnerFence3 BoxPlot.OuterFence1 BoxPlot.OuterFence3 |
TChart.RemoveSeries |
Funnel |
Funnel.AddSegment |
Series.Delete |
请注意,不使用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