mschart示例和技巧

打开MSDN,在“索引”页写下“MSChart 控件”回车,会有详细的使用说明,以下示例摘自MSDN:

MSChart 控件示例

下面的示例显示一个具有8 行8 列数据的三维图表,并设置了图例的参数。

Private Sub Command1_Click()

With MSChart1

'显示一个具有8 行8 列数据的三维图表。

.ChartType = VtChChartType3dBar

.ColumnCount = 8

.RowCount = 8

For column = 1 To 8

For row = 1 To 8

.Column = column

.Row = row

.Data = row * 10

Next row

Next column

'将图表作为图例的背景。

.ShowLegend = True

.SelectPart VtChPartTypePlot, index1, index2, _

index3, index4

.EditCopy

.SelectPart VtChPartTypeLegend, index1, _

index2, index3, index4

.EditPaste

End With

End Sub

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ''''''''''''''''''''''''''''''

'过程名: subCurveInit

'作用: 初始化MSChart,使其满足作图要求

'说明: 作图时如下:

' 当设置图形为二维散点图,画一条曲线时需定义一个二维数组MyData(0 to n,0 to 1),赋值方法如下

' ******* X轴********y轴*******

' MyData(0,0)=1:MyData(0,1)=1

' MyData(1,0)=1:MyData(1,1)=1

' .........

' MyData(n,0)=1:MyData(n,1)=1

' 当为两条曲线时定义MyData(0 to n,0 to 3),赋值如下

' 第一条:**X轴***y轴******第二条:*****X轴******y轴******* ' MyData(0,0)=1:MyData(0,1)=1:MyData(0,2)=1:MyData(0,3)=1

' MyData(1,0)=1:MyData(1,1)=1:MyData(1,2)=1:MyData(1,3)=1

' .........

' MyData(n,0)=1:MyData(n,1)=1:MyData(n,2)=1:MyData(n,3)=1

' 当为多条曲线的时候依此类推定义Mydata数组

' 设置曲线相关属性可对.Plot.SeriesCollection(x)的子属性进行操作完成.(x为第几条曲线)

' 最后令.ChartData = MyData即可

'修改历史:

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '''''''''''''''''''''''''''''''''

Dim MyData!(0 To 5, 0 To 3)

Public Sub subCurveInit(Optional intAxisXMax As Integer, Optional intAxisXMin As Integer)

'//判断是否需要修改X轴显示范围,用于动态显示

With frmMain.chaCurve

If intAxisXMax <> 0 Then '//是否需要修改最X轴最大值

.Plot.Axis(VtChAxisIdX).ValueScale.Maximum = intAxisXMax '//X轴最大值

If intAxisXMax <> 0 Then '//是否修改X轴最小值

.Plot.Axis(VtChAxisIdX).ValueScale.Minimum = intAxisXMin '//X轴最小值

End If

Else '//如果无需修改X轴最大或最小值,进行以下初始化工作

.TitleText = "温度/时间" '//标题

.Title.VtFont.VtColor.Set 255, 255, 0 '//标题颜色

'//对两条曲线的颜色和粗细设置

.ColumnCount = 4 '//当设置图形为二维散点图时.一条曲线需两个Column,例如两条曲线时,只需对Column=1和3操作,就可完成各自属性设置

.Plot.SeriesCollection(1).Pen.VtColor.Set 0, 0, 255 '//第一条为理想曲线,设置为蓝色

.Plot.SeriesCollection(1).Pen.Width = 10 '//设置为较细

.Plot.SeriesCollection(3).Pen.VtColor.Set 255, 0, 0 '//第二条为实际曲线,设置为红色

.Plot.SeriesCollection(3).Pen.Width = 10 '//设置为较细

'//设置X,Y轴不自动缩放,固定大小

.Plot.Axis(VtChAxisIdX).ValueScale.Auto = False

.Plot.Axis(VtChAxisIdY).ValueScale.Auto = False

'// 设置X轴的最大值和最小值

.Plot.Axis(VtChAxisIdX).ValueScale.Maximum = 250 '//X轴最大值

.Plot.Axis(VtChAxisIdX).ValueScale.Minimum = 0 '//X轴最小值

'// 设置Y轴最大值和最小值

.Plot.Axis(VtChAxisIdY).ValueScale.Maximum = 100 '//Y轴最大值

.Plot.Axis(VtChAxisIdY).ValueScale.Minimum = -50 '//Y轴最小值

'//设置网格

.Plot.Axis(VtChAxisIdX).ValueScale.MajorDivision = 25 '//X轴主要网格数量

.Plot.Axis(VtChAxisIdY).ValueScale.MajorDivision = 15 '//Y轴主要网格数量

.Plot.Axis(VtChAxisIdX).ValueScale.MinorDivision = 5 '//X轴次要网格数量

.Plot.Axis(VtChAxisIdX).AxisGrid.MinorPen.Style = VtPenStyleNull '//X轴次要网格不显示

.Plot.Axis(VtChAxisIdY).ValueScale.MinorDivision = 0 '//Y轴次要网格数量

.Plot.Axis(VtChAxisIdX).AxisGrid.MajorPen.Style = VtPenStyleSolid '//X轴网格为实线

.Plot.Axis(VtChAxisIdY).AxisGrid.MajorPen.Style = VtPenStyleSolid '//Y轴网格为实线

'//设置坐标系在MSChart控件框中的大小

.Plot.AutoLayout = False '//改为手动设置大小

.Plot.LocationRect.Min.X = 0

.Plot.LocationRect.Min.Y = 0 '//设置最小坐标位置为0,即坐标系顶部和左边都靠着MSChart的边框

.Plot.LocationRect.Max.X = .Width

.Plot.LocationRect.Max.Y = .Height '//设置最大值为MSChart边框的长和宽,使坐标系右边和底部靠着边框

.Plot.UniformAxis = False '//指定图表的所有值坐标轴的单位刻度不一致(X,Y轴坐标不需要一致).

'//设置图形类型

.chartType = VtChChartType2dXY '//设置图形为二维散点图

.ChartData = MyData '//可有可无,目的是防止初始显示时曲线框内显示杂乱曲线

End If

End With

End Sub

Private Sub Form_Load()

MyData(0, 0) = 50: MyData(0, 1) = 80: MyData(0, 2) = 50: MyData(0, 3) = 30

MyData(1, 0) = 100: MyData(1, 1) = 70: MyData(1, 2) = 100: MyData(1, 3) = 60

MyData(2, 0) = 150: MyData(2, 1) = 60: MyData(2, 2) = 150: MyData(2, 3) = 50

MyData(3, 0) = 200: MyData(3, 1) = 90: MyData(3, 2) = 200: MyData(3, 3) = 90

MyData(4, 0) = 210: MyData(4, 1) = 50: MyData(4, 2) = 230: MyData(4, 3) = 40

MyData(5, 0) = 250: MyData(5, 1) = 50: MyData(5, 2) = 250: MyData(5, 3) = 40

subCurveInit

End Sub

MSCHART的使用之vb中利用MSCHART控件画二维散点图2008年03月31日星期一 16:12近日在学习傅立叶分解时,写了个小程序来验证自己对傅立叶分解的一些理解,为了更生动直观就需要画一些图形,以前总是用picture控件来实现,后来在网上看到VB中有个MSCHART控件可以来画很多类型的图形,就学习了一下,由于是第一次搞,所以按习惯在网上搜索相关帖子,发现没有一个很完整的关于MSCHART中二维散点图的例子,很是郁闷,经过我自己几天的努力,终于解决了这个问题.现以一个具体的例子来说明,希望我的这个例子能对大家有所帮助.这个例子是一个论坛上一位网友提出来的,但是这个问题一直到现在还没有人回答,我权当在这里回答一下吧.问题如下:

Private Sub Form_Load()

'对于二维散点图来说,第一列代表了X轴坐标,第二列代表了Y轴坐标

'因此在定义二维数据时,第二维定义为0到1,第一维代表了第几点数据,可根据数据点数变化

'下面以数据点数有21点为列子

Dim MyData(20, 1) As Double

'-----x轴坐标值-----Y轴坐标值----------

MyData(0, 0) = 0: MyData(0, 1) = 180 '本句代表了:第一点数据的X轴坐标为0,Y轴坐标为180

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

我们同是跟mschart较劲的人啊

我给你一个比较麻烦,但是可控性强的办法就是数组,然后循环给mschar赋值

你是不是用xy的那个模式,想显示温度,时间上的那个点?

如果是这样的话,那么二维数组就够了,一个x,一个y

arrValues(i, 1) = " " '& Format(rs1!时间, "hh:mm ")

arrValues(i, 2) = val(rs.Fields( "温度"))

这样足够让mschart显示横纵坐标交点了

用1,2两条曲线为例

你再循环之前,首先设定rowcount=nums(有可能你每次取出来的recourdcount不同,那

么就要每次调整一下,让rowcount保持那个最大的nums

然后在Next j之前画mschart

这里要说明的是columncount=2*你要取的曲线条数在我用的这个例子里面就是2*2=4

下面我们来画mschart

With chart

For i = 1 To ubound(arrValues)

.DataGrid.SetData i, j, arrValues(i, 1), 0

.DataGrid.SetData i, j+1, arrValues(i, 2), 0

Next i

end with

next j

这样就不会覆盖到前一条了

同一个图,同xy数轴,画多条曲线:

Private Sub Command1_Click()

Dim i As Integer, Data() As Single, n As Integer

n = 10

ReDim Data(n, 3) As Single

For i = 0 To n

Data(i, 0) = i '第1条曲线x数据

Data(i, 1) = i * 2 '第1条曲线y数据

Data(i, 2) = Data(i, 0) '关键在这里!第2条曲线x数据(可以和第1条曲线x 数据不同)

Data(i, 3) = i * 3 '第2条曲线y数据

Next i

MSChart1.ChartData = Data

MSChart1.chartType = VtChChartType2dXY

End Sub

59 m_Chart.GetPlot().GetSeriesCollection().GetItem(1).GetPen().GetVtColor().Set(0,255,0);

// 设置曲线上数据点颜色

70

m_Chart.GetPlot().GetSeriesCollection().GetItem(1).GetDataPoints().GetItem(-1).GetDataPointL abel().GetVtFont().GetVtColor().Set(0,255,0);

相关文档
最新文档