图表控件的类型
VtChChartType3dBar 0 3维条形图
VtChChartType2dBar 1 2维条形图
VtChChartType3dLine 2 3维折线图
VtChChartType2dLine 3 2维折线图 -----一維數組一條折線,兩維數組兩條依次類推
VtChChartType3dArea 4 3维域型图
VtChChartType2dArea 5 2维域型图
VtChChartType3dStep 6 3维阶梯图
VtChChartType2dStep 7 2维阶梯图
VtChChartType3dCombination 8 3维联合图
VtChChartType2dCombination 9 2维联合图
VtChChartType2dPie 14 2维饼形图
VtChChartType2dXY 16 2维坐标图----------------------兩維數組第一個值為橫座標,第二個為縱座標,
三維則第三個為曲線2的縱座標
一、先看个小例子
Private Sub Form_Load()
Dim MyData(20,1) As Double
'-----x轴坐标值-----Y轴坐标值----------
MyData(0,0) = 0: MyData(0,1) = 180 '本句代表了:第一点数据的X轴坐标为0,Y轴坐标为18
MyData(1,0) = 6: MyData(1,1) = 60 MyData(2,0) = 8: MyData(2,1) = 60
MyData(3,0) = 11: MyData(3,1) = 0
MyData(4,0) = 16: MyData(4,1) = 0
MyData(5,0) = 19: MyData(5,1) = 60
MyData(6,0) = 25.8: MyData(6,1) = 60
MyData(7,0) = 28.8: MyData(7,1) = 0
MyData(8,0) = 31.8: MyData(8,1) = 60
MyData(9,0) = 40.3: MyData(9,1) = 60
MyData(10,0) = 43.3: MyData(10,1) = 0
MyData(11,0) = 93.3: MyData(11,1) = 0
MyData(12,0) = 96.3: MyData(12,1) = 60
MyData(13,0) = 99.3: MyData(13,1) = 0
MyData(14,0) = 105.3: MyData(14,1) = 0
MyData(15,0) = 135.3: MyData(15,1) = 0
MyData(16,0) = 144.3: MyData(16,1) = 180
MyData(17,0) = 148.8: MyData(17,1) = 270
MyData(18,0) = 405.03: MyData(18,1) = 270
MyData(19,0) = 409.53: MyData(19,1) = 180
MyData(20,0) = 564.17: MyData(20,1) = 180
'波形图外观设置
With MSChart1
.TitleText = "速度 m/min"
' '设置图线的外观
.Plot.SeriesCollection(1).Pen.Width = 30
.Plot.SeriesCollection(1).Pen.Style = VtPenStyleSolid
' '设置XY轴
.Plot.Axis(VtChAxisIdX).ValueScale.Auto = False
.Plot.Axis(VtChAxisIdY).ValueScale.Auto = False
'// 设置最大值
.Plot.Axis(VtChAxisIdX).ValueScale.Maximum = 600 '设置横轴标注最大值
.Plot.Axis(VtChAxisIdY).ValueScale.Maximum = 300 '设置纵轴标注最大值
'// 设置最小值
.Plot.Axis(VtChAxisIdY).ValueScale.Minimum = 0
.Plot.Axis(VtChAxisIdX).ValueScale.Minimum = 0
'//
.Plot.Axis(VtChAxisIdX).ValueScale.MajorDivision = 6 'X轴主要网格数量
.Plot.Axis(VtChAxisIdY).ValueScale.MajorDivision = 6 'Y轴主要网格数量
.Plot.Axis(VtChAxisIdX).ValueScale.MinorDivision = 0 'X轴次要网格数量
.Plot.Axis(VtChAxisIdY).ValueScale.MinorDivision = 0 'Y轴次要网格数量
.Plot.Axis(VtChAxisIdX).AxisGrid.MajorPen.Style = VtPenStyleDotted
.Plot.Axis(VtChAxisIdY).AxisGrid.MajorPen.Style = VtPenStyleDotted
MSChart1.Plot.AutoLayout = False
MSChart1.Plot.UniformAxis = False
MSChart1.chartType = VtChChartType2dXY '设置图形为二维散点图
MSChart1.ChartData = MyData '数据End With
End Sub
1.RowCount属性 设置作图数据的行数。 2.ColumnCount属性 设置作图数据的列数。 3.TitleText属性 设置图题。 4.RowLabelCount属性 设置行标的个数。 5.RowLabel属性 设置行标。 6.ColumnLabelCount属性 设置列标的个数。 7.ColumnLabel属性 设置列标。 8.Row属性 设置当前行。 9.Column属性 设置当前列。 10.AutoIncrement属性 如果数据是连续存放的,将AutoIncrement属性设为True,可以10 . 不用随时设置当前行和当前列,向图表控件提供数据时可以连续行。 11.ShowLagend属性 设置为True时可以显示图例。
4 图表控件的数据 只有图表控件取得数据才有可能显示数据。图表控件的数据是存放在内置的数据网格内。图表控件数据网格取得数据的方法有: 1.使用Data属性 图表数据可以保存在图表控件的Data属性中。Data属性只能存储数字型的数据,而不能保存文本。在对Data属性赋值前,必须先设置RowCount属性和ColumnCount属性来提供数据的行数和列数,系统根据行数和列数安排Data的大小。 在向Data属性赋值时,还需要指明当前行和当前列。例如, MSChart1.Column = 5 MSChart1.Data = XYZ 是将XYZ赋予Data的第3行第5列。 如果数据是连续存放的,并将AutoIncrement属性设为True,可以不用随时设置当前行和当前列。例如, MSChart1.Data = X(1) MSChart1.Data = X(2) MSChart1.Data = X(3) 2.使用ChartData属性 ChartData属性既可以存放数字型数据,也可以存放文本型数据。例如, Dim vntX(1 To 4) As Variant vntX(1) = “产量” vntX(2) = 200 vntX(3) = 300 vntX(4) = 400 MSChart1.ChartData = X “产量”将标示在所绘制图形的X轴上。 3.使用SetData方法 格式是: MSChart1.DataGrid.SetData 行,列,数值,nullFlag “数值”为双精度。nullFlag指明数据点是否为空。 本章所开发的绘制图表应用程序使用SetData方法向图表对象添加数据。 4.图题、行标和列标 对图题、行标示和列标示的赋值分两种情况: ?图题的赋值使用TitleText属性。 ?行标示或列标示的赋值先设置当前行或当前列,然后使用RowLabel属性或ColumnLabel属性。例如, MSChart1.Row = 1 MSChart1.RowLabel = “A” (2)使用ChartData属性 假定用图表控件表示一个2维数据,作图时使用MSChart1.ChartData = vntX。现在我们看一看vntX是如何形成的。 Dim vntX(1 To 3,1 To 4) As Variant vntX(1,1) = “产品质量逐年变化表” 图题放在vnt(1,1) vntX(1,2) = ”1级” 列标放在第1行 vntX(1,3) = ”2级” vntX(1,4) = ”3级” vntX(2,1) = “1999年” 行标放在第1列 vntX(2,2) = 100 1级品数量 vntX(2,3) = 200 2级品数量 vntX(2,4) = 300 3级品数量 vntX(3,1) = “2000年” 行标放在第1列 vntX(3,2) = 300 1级品数量 vntX(3,3) = 200 2级品数量 vntX(3,4) = 100 |
三、MSChart的元素组成
ChartAreas:增加多个绘图区域,每个绘图区域包含独立的图表组、数据源,用于多个图表类型在一个绘图区不兼容时。
AlignmentOrientation:图表区对齐方向,定义两个绘图区域间的对齐方式。
AlignmentStyle:图表区对齐类型,定义图表间用以对其的元素。
AlignWithChartArea:参照对齐的绘图区名称。
InnerPlotPosition:图表在绘图区内的位置属性。
Auto:是否自动对齐。
Height:图表在绘图区内的高度(百分比,取值在0-100)
Width:图表在绘图区内的宽度(百分比,取值在0-100)
X,Y:图表在绘图区内左上角坐标
Position:绘图区位置属性,同InnerPlotPosition。
Name:绘图区名称。
Axis:坐标轴集合
Title:坐标轴标题
TitleAlignment:坐标轴标题对齐方式
Interval:轴刻度间隔大小
IntervalOffset:轴刻度偏移量大小
MinorGrid:次要辅助线
MinorTickMark:次要刻度线
MajorGrid:主要辅助线
MajorTickMark:主要刻度线
DataSourceID:MSChart的数据源。
Legends:图例说明。
Palette:图表外观定义。
Series:最重要的属性,图表集合,就是最终看到的饼图、柱状图、线图、点图等构成的集合;可以将多种相互兼容的类型放在一个绘图区域内,形成复合图。
IsValueShownAsLabel:是否显示数据点标签,如果为true,在图表中显示每一个数据值
Label:数据点标签文本
LabelFormat:数据点标签文本格式
LabelAngle:标签字体角度
Name:图表名称
Points:数据点集合
XValueType:横坐标轴类型
YValueType:纵坐标轴类型
XValueMember:横坐标绑定的数据源(如果数据源为Table,则填写横坐标要显示的字段名称)
YValueMembers:纵坐标绑定的数据源(如果数据源为Table,则填写纵坐标要显示的字段名称,纵坐标可以有两个)
ChartArea:图表所属的绘图区域名称
ChartType:图表类型(柱形、饼形、线形、点形等)
Legend:图表使用的图例名称
Titles:标题集合。
width:MSChart的宽度。
height:MSChart的高度。
常用事件:
Series1.Points.DataBind()
绑定数据点集合,如果要在一个MSChart控件的一个绘图区(ChartArea)内添加多个不同数据源的图表,就用这个主动绑定数据集合的方法。可以将表中指定字段的值绑定到指定的坐标轴上。
MSChart1.DataBind()
近日在学习傅立叶分解时,写了个小程序来验证自己对傅立叶分解的一些理解,为了更生动直观就需要画一些图形,以前总是用picture控件来实现,后来在网上看到VB中有个MSCHART控件可以来画很多类型的图形,就学习了一下,由于是第一次搞,所以按习惯在网上搜索相关帖子,发现没有一个很完整的关于MSCHART中二维散点图的例子,很是郁闷,经过我自己几天的努力,终于解决了这个问题.现以一个具体的例子来说明,希望我的这个例子能对大家有所帮助.这个例子是一个论坛上一位网友提出来的,但是这个问题一直到现在还没有人回答,我权当在这里回答一下吧.问题如下: 如何用VB画出我附件中的图,请各位知道的高手指点下,小弟感激不尽! 上面是这个帖子的原始图形 根据此我写了下面的代码 Private Sub Form_Load() '对于二维散点图来说,第一列代表了X轴坐标,第二列代表了Y轴坐标 运行后的效果图如下 MSCHART的二维散点图对于实际工作是有很大用途的,例如数据采集中,实现时间变量的曲线等等.希望这个例子对大家有帮助 |