| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 9565 人关注过本帖, 1 人收藏
标题:VB6.0 用mschart控件绘制多条动态曲线怎么做到 请指教 谢谢了
只看楼主 加入收藏
梦千殇
Rank: 2
等 级:论坛游民
帖 子:49
专家分:19
注 册:2015-1-6
收藏(1)
得分:0 
回复 8楼 lianyicq
按照你说的方法我又试了一下,程序如下:
Dim mydata(600, 2)
Dim i As Single
Private Sub Form_Load()
With MSChart1
     .TitleText = "压强变化 kpa/s"
'    '设置图线的外观
    .Plot.SeriesCollection(1).Pen.Width = 30
       .Plot.SeriesCollection(1).Pen.Style = VtPenStyleSolid
        .Plot.SeriesCollection(2).Pen.Width = 30
       .Plot.SeriesCollection(2).Pen.Style = VtPenStyleSolid
'        .Plot.SeriesCollection(3).Pen.Width = 30
'       .Plot.SeriesCollection(3).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 = 1000 '设置纵轴标注最大值
    '// 设置最小值
    .Plot.Axis(VtChAxisIdY).ValueScale.Minimum = 400
    .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
   ' .Plot.Axis(VtChAxisIdY).AxisTitle = "压强(kpa)"
       .Plot.Axis(VtChAxisIdX).AxisTitle = "时间(s)"
    MSChart1.Plot.AutoLayout = False
    MSChart1.Plot.UniformAxis = False
    MSChart1.chartType = VtChChartType2dLine
    'VtChChartType2dXY '设置图形为二维散点图
'    MSChart1.ChartData = mydata
   
    'MSChart1.Backdrop.Fill.Style = VtFillStyleBrush
    'MSChart1.Backdrop.Fill.Brush.FillColor.Set 0, 0, 0
'   For i = 1 To 600
''   .Row = i
'   .RowLabel = i
'   Next
   
   
    End With
End Sub

Private Sub Timer1_Timer()

mydata(1, 0) = 0
mydata(i, 0) = i
mydata(1, 1) = 700
mydata(i, 1) = 700
mydata(1, 2) = 500
mydata(i, 2) = 500

MSChart1.ChartData = mydata
i = i + 1

    If i > 600 Then
    Timer1.Enabled = False
    Else
    Timer1.Enabled = True
    End If
End Sub
效果如下:
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册

不知道 是哪里的问题  就是图表显示的不清楚 我需要怎么改  谢谢了
2015-01-07 11:14
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:0 
600个点太密了,你把代码中的所有的600改成20看看效果.
或者不画X格线: .Plot.Axis(VtChAxisIdX).AxisGrid.MajorPen.Style = VtPenStyleNull

[ 本帖最后由 lianyicq 于 2015-1-7 12:54 编辑 ]

大开眼界
2015-01-07 11:35
梦千殇
Rank: 2
等 级:论坛游民
帖 子:49
专家分:19
注 册:2015-1-6
收藏
得分:0 
回复 12楼 lianyicq
我改成20个之后,效果好点了,但我必须要600个采集点,一秒钟一个,我需要采集10分钟的数据,我的程序:
Dim mydata(20, 2)
Dim i As Single
Private Sub Form_Load()
With MSChart1
     .TitleText = "压强变化 kpa/s"
'    '设置图线的外观
    .Plot.SeriesCollection(1).Pen.Width = 30
       .Plot.SeriesCollection(1).Pen.Style = VtPenStyleSolid
        .Plot.SeriesCollection(2).Pen.Width = 30
       .Plot.SeriesCollection(2).Pen.Style = VtPenStyleSolid
'        .Plot.SeriesCollection(3).Pen.Width = 30
'       .Plot.SeriesCollection(3).Pen.Style = VtPenStyleSolid
      
      
'    '设置XY轴
    .Plot.Axis(VtChAxisIdX).ValueScale.Auto = False
    .Plot.Axis(VtChAxisIdY).ValueScale.Auto = False
    '// 设置最大值
    .Plot.Axis(VtChAxisIdX).ValueScale.Maximum = 20 '设置横轴标注最大值
    .Plot.Axis(VtChAxisIdY).ValueScale.Maximum = 1000 '设置纵轴标注最大值
    '// 设置最小值
    .Plot.Axis(VtChAxisIdY).ValueScale.Minimum = 400
    .Plot.Axis(VtChAxisIdX).ValueScale.Minimum = 0
    .Plot.Axis(VtChAxisIdX).ValueScale.MajorDivision = 5 '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
   ' .Plot.Axis(VtChAxisIdY).AxisTitle = "压强(kpa)"
       .Plot.Axis(VtChAxisIdX).AxisTitle = "时间(s)"
    MSChart1.Plot.AutoLayout = False
    MSChart1.Plot.UniformAxis = False
    MSChart1.chartType = VtChChartType2dLine
    'VtChChartType2dXY '设置图形为二维散点图
'    MSChart1.ChartData = mydata
   
    MSChart1.Backdrop.Fill.Style = VtFillStyleBrush
    MSChart1.Backdrop.Fill.Brush.FillColor.Set 255, 255, 255
'   For i = 1 To 600
''   .Row = i
'   .RowLabel = i
'   Next

   .Refresh
   
   
    End With
End Sub

Private Sub Timer1_Timer()

mydata(1, 0) = 0
mydata(i, 0) = i
mydata(1, 1) = 700
mydata(i, 1) = 700
mydata(1, 2) = 500
mydata(i, 2) = 500

MSChart1.ChartData = mydata
i = i + 1

    If i > 20 Then
    Timer1.Enabled = False
    Else
    Timer1.Enabled = True
    End If
End Sub
效果如图:
图片附件: 游客没有浏览图片的权限,请 登录注册

我只做了两条曲线,但显示的是3条并且还不是从x=0处开始的,有办法改吗 还有 我需要600个点 有办法完善吗  谢谢了
如果vb6.0用mschart控件画多条动态曲线有弊病的话,还有别的更好的方法实现吗 谢谢了
2015-01-07 13:01
梦千殇
Rank: 2
等 级:论坛游民
帖 子:49
专家分:19
注 册:2015-1-6
收藏
得分:0 
回复 12楼 lianyicq
采集600个点,不画x轴坐标的效果是这样的
图片附件: 游客没有浏览图片的权限,请 登录注册

底下有黑色道道 很难看
2015-01-07 13:05
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:0 
三条线的原因
      
 .Plot.SeriesCollection(1).Pen.Style = VtPenStyleNull

你该知道下边为什么是黑色吧.
在MSChart1.ChartData = mydata后增加

For temp = 1 To 601
MSChart1.Row = temp
MSChart1.RowLabel = ""
Next
就算没有黑道,也难看.建议用点或画线的办法.

[ 本帖最后由 lianyicq 于 2015-1-7 13:21 编辑 ]

大开眼界
2015-01-07 13:20
梦千殇
Rank: 2
等 级:论坛游民
帖 子:49
专家分:19
注 册:2015-1-6
收藏
得分:0 
回复 15楼 lianyicq
我是刚接触vb的 以前有些基础基础也只限于课本上的东西 但没做过工程 不懂您说的用画点和线的方法是什么 您能指导一下吗 谢谢了
2015-01-07 13:27
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:0 
现成的mschart控件是把数据往里装,显示格式不一定满足各种需求.
显示实时信号,可能会有幅值缩放,扫描时间设定,多通道操作等功能.
可以用PSET按你要求画点,比如坐标位置,点的颜色,点的大小.如果你用数据的纵坐标乘以一个可随时设定的幅值缩放的比例后点用PSET就更好了.
时间是横轴,也可以设定个扫描时间,比如一般以一个像素为间隔.如果设为十像素一个间隔,波形就被拉宽了.
你觉得PSET画出的波形不好看,是不连续的.就用LINE的方法.设定起点和终点的坐标,比如当前t秒对应点设为终点,t-1秒对应点设为起点.这样各点之间就用直线连上了.
可以参看前段时间有个画WAV波形的贴子.是用LINE实现的

大开眼界
2015-01-07 13:46
梦千殇
Rank: 2
等 级:论坛游民
帖 子:49
专家分:19
注 册:2015-1-6
收藏
得分:0 
回复 17楼 lianyicq
line方法 是在picture控件中画吗 我之前见过例子 如果是的话 我就试着画画试试 谢谢您的帮助
2015-01-07 14:00
八云
Rank: 2
等 级:论坛游民
威 望:1
帖 子:4
专家分:20
注 册:2018-3-19
收藏
得分:0 
回复 17楼 lianyicq
PSET画点,timer间隔设置为1ms,一条曲线数据多了以后,
几秒钟都画不完一条线,这种方式不适合曲线的动态显示。
2018-03-20 00:22
快速回复:VB6.0 用mschart控件绘制多条动态曲线怎么做到 请指教 谢谢了
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025829 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved