【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)??梢蕴砑痈郊虞S,它們將復制與前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