打算用MSChart画两条长度不同的曲线,怎么总画成长度相同的?附代码!

pongid2353345 2005-07-11 09:22:35
我想使用MSChart将两个长度不相同的数组在图形上表示出来,为什么总出错??代码如下:
num1是X()的数组长度,num2是Y()的数组长度
加入X()中有12个点,而Y()中有24个点,我使用如下的代码得到的曲线怎么总是两天长度相同阿??
Sub drew2(X() As Double, Y() As Double, num1 As Integer, num2 As Integer)
Dim row As Integer, axisID As Integer, i As Integer, N As Integer
With Me.MSChart1
.ColumnCount = 2
.RowCount = num2
'短的那条线
.Column = 1
.ColumnLabel = "实测"
For row = 1 To num1
.row = row
.Data = X(row)
.RowLabel = row
Next row
'长的那条
.Column = 2
.ColumnLabel = "还原"
For row = 1 To num2
.row = row
.Data = Y(row)
.RowLabel = row
Next row
End With
end sub
请问高手这是怎么回事???
...全文
247 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
pongid2353345 2005-07-22
  • 打赏
  • 举报
回复
tanks
you are the best men
qzgrmc 2005-07-21
  • 打赏
  • 举报
回复
这其实就是一个 缺测点的问题。 不管X和Y 的数组长度如何,在MSCHART上都必须是统一的ROW的座标。所以必须将 NUM1 到 NUM2之间的值设为NULL
使用 MSCHART1.GRIDDATA.SETDATA 函数 将NULLFLAG 设为TRUE 即可。
Sub drew2(X() As Double, Y() As Double, num1 As Integer, num2 As Integer)
Dim row As Integer, axisID As Integer, i As Integer, N As Integer
With Me.MSChart1
.ColumnCount = 2
.RowCount = num2
'短的那条线
.Column = 1
.ColumnLabel = "实测"
For row = 1 To num1
.DataGrid.SetData row, 1, x(row), False
.RowLabel = row
Next row
For row = num1 + 1 To num2
.DataGrid.SetData row, 1, 0, True
Next row


'长的那条
.Column = 2
.ColumnLabel = "还原"
For row = 1 To num2
.row = row
.Data = Y(row)
.RowLabel = row
Next row
End With
end sub
pongid2353345 2005-07-18
  • 打赏
  • 举报
回复
来人啊,顶
pongid2353345 2005-07-16
  • 打赏
  • 举报
回复
to Gujianda:
好像和我说的有点出入
你的短的曲线里面后十个点还是有数据的都是X(0)=20
我的意思很简单就是让后面的那十个点生成的曲线消失掉,只有Y()生成的曲线和X()前十个数据生成的一半曲线!
你的我靠过去还是两断完整的曲线啊??
Gujianda 2005-07-14
  • 打赏
  • 举报
回复
修正:
'短的那条线
.Column = 1
.ColumnLabel = "实测"
For row = 1 To num2
.row = row
.Data = X(IIf(row <= num1, row, 0))
.RowLabel = row
Next row
Gujianda 2005-07-14
  • 打赏
  • 举报
回复
我帮你改了一下:
Private Sub Command1_Click()

Dim XX(10) As Double, YY(20) As Double
For i = 0 To 10
XX(i) = 20 * (1 + Sin(6.28 * i / 10))
Next i

For i = 0 To 20
YY(i) = 20 * (1 + Sin(6.28 * i / 20))
Next i

Call drew2(XX, YY, 10, 20)

End Sub


Sub drew2(X() As Double, Y() As Double, num1 As Integer, num2 As Integer)
On Error Resume Next
Dim row As Integer, axisID As Integer, i As Integer, N As Integer
With Me.MSChart1
.ColumnCount = 2
.RowCount = num2

'短的那条线
.Column = 1
.ColumnLabel = "实测"
For row = 1 To num2
.row = row
.Data = X(IIf(row < 11, row, 0))
.RowLabel = row
Next row

'长的那条
.Column = 2
.ColumnLabel = "还原"
For row = 1 To num2
.row = row
.Data = Y(row)
.RowLabel = row
Next row
End With
End Sub

两条正弦曲线画得不错^_^。
pongid2353345 2005-07-14
  • 打赏
  • 举报
回复
自己顶一个!!
pongid2353345 2005-07-12
  • 打赏
  • 举报
回复
错误是没有,只是画出来的曲线和实际的数据长度不吻合
pongid2353345 2005-07-12
  • 打赏
  • 举报
回复
楼上的二位,这个方法我试过了
可还是不行,明明X()只要把他的12个坐标画出来就可以了,可莫名其妙的出来还是24个点画出的线!
这是怎么回事?
还有就是当X,Y的长度相同是,我在增大Y的长度,画出来的曲线,X就只有一般,Y是全部曲线,可X中没有数据的后半部分全部默认为0,横坐标的后半部分全是X的值!
这又是怎么回事?
cugbqqinying 2005-07-12
  • 打赏
  • 举报
回复
关注中!!!帮你顶啦!!!
估计错误是绘出的图形和自己想要的不一样!!!!!
同意2楼的!!!!
zhangjinzhicn 2005-07-12
  • 打赏
  • 举报
回复
www.wave12.com
xueyunjian 2005-07-12
  • 打赏
  • 举报
回复
我想问一下! 我在做VB的时候 发现有些控键 比如说 按钮 在其他的机器上面就说 控键未注册! 这个是为什么! 可是我注册了以后确发现 需要运行库!
简易无忌 2005-07-12
  • 打赏
  • 举报
回复
什么错呀?贴出来瞅瞅...


X() As Double, Y() As Double 别用参数传递,设置为全局变量,
num1 As Integer, num2 As Integer 可用 UBound 代替,于是,你的过程将变为:

Sub drew2
...
...
end sub

试试看。

7,763

社区成员

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

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