关于mschart动态显示二维x,y散点图

dinowj 2008-09-04 01:34:46
小弟这里有一组二维(x,y)(如(3350.7823,4532.5234),xy坐标的范围都比较大)的数据,想用mschart显示出来,数据动态输入的,大约3s一组,请各位大侠指教一下我该如何实现,看了好几天没找到头绪,急了。
...全文
988 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuehan1108 2009-08-24
  • 打赏
  • 举报
回复
你发的这段只是初始化嘛,我把我的数据赋给Mschart.data后怎么没显示呢?如果不加dim mydata(0 to n,0 to 1) As variant就是折线图,加了后就没图了。
xuehan1108 2009-08-24
  • 打赏
  • 举报
回复
怎样去掉两点之间的连接线呢?
dinowj 2008-09-06
  • 打赏
  • 举报
回复
大侠,再帮忙看看,东西在我的邮箱里 用户名:dinowj@163.com 密码:051122 这个问题怎么解决啊!!!
dinowj 2008-09-06
  • 打赏
  • 举报
回复
高手出招就是不一样,先试试。
打死不掉牙 2008-09-06
  • 打赏
  • 举报
回复
已经改完可以显示了,请查收!
dinowj 2008-09-06
  • 打赏
  • 举报
回复
这个问题解决
打死不掉牙 2008-09-04
  • 打赏
  • 举报
回复
你定义数组的时候不要制定类型,定义成Variant类型,dim mydata(0 to n,0 to 1) As variant,这样没赋值的部分就是NULL,就没有线段,否则当定义成Double或其他类型时,如果没有赋值的部分都是0,这样他就是原点,所以最终曲线都是回到原点,就形成了折线,我也是遇到了,琢磨半天才知道的,呵呵!
dinowj 2008-09-04
  • 打赏
  • 举报
回复
而且很奇怪,如果有多组数据,那条折线是从最后一个数据连到第一个数据的,相当难看了
dinowj 2008-09-04
  • 打赏
  • 举报
回复
多问几句,可不可以将其中连接几点的折线隐藏,或者干脆不要,有没有什么好方法。
打死不掉牙 2008-09-04
  • 打赏
  • 举报
回复
觉得好的话给我多加点分我也不反对,呵呵!
打死不掉牙 2008-09-04
  • 打赏
  • 举报
回复
注释忘发了,再来一次

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'过 程 名: 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即可
'修改历史:
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
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
打死不掉牙 2008-09-04
  • 打赏
  • 举报
回复
Dim MyData(0 to n,0 to 1)'//n为多少个点.MyData(n,0)存第n点的x坐标,MyData(n,1)存第n点的y坐标,类推.
然后mschart1.ChartData = MyData
顺便给你个初始化函数,注释都有很多,你可以参照着该就行.让你少走点弯路,开始弄时我也弄了两天.琢磨出来了,呵呵!

'//可指定x轴的值
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

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧