用picture.line 畫出折線圖表示一系列數據分析,可是在繪圖的時候紿終都只能從0坐標來繪圖,卻不可以顯示負值
請問我該如何解決?請指教附原碼:
DrawGrid (Pic3, .vRows, .vCols, .vWL, .vWR, .vHtop - 300, .vHbot + 400, .vX1, .vY1, .vX2, .vY2, "", xLabel, yLabel)
DrawGrid (Pic3, 10, 10, 800, 200, 200, 900, 0, 300, 1200, 0, "", xLabel, yLabel)
Public Function DrawGrid(Pic As PictureBox, vRows As Single, vCols As Single, _
vWL As Single, vWR As Single, vHtop As Single, vHbot As Single, _
vX1 As Single, vY1 As Single, vX2 As Single, vY2 As Single, vstrTitle As String, vXtitle As String, vYtitle As String)
Dim tX1 As Single, tY1 As Single, tX2 As Single, tY2 As Single
Dim xUnit As Single, yUnit As Single
Dim TmpInt As Integer
Dim yStep As Single
Dim xStep As Single
DrawGrid = 0
Pic.Cls
xUnit = (vX2 - vX1) / (Pic.Width - vWL - vWR)
yUnit = (vY1 - vY2) / (Pic.Height - vHtop - vHbot)
tX1 = vX1 - vWL * xUnit
tY1 = vY1 + vHtop * yUnit
tX2 = vX2 + vWR * xUnit
tY2 = vY2 - vHbot * yUnit
If tY1 = tY2 Then DrawGrid = -1
Exit Function
End If
Pic.Scale (tX1, tY1)-(tX2, tY2)
Dim delY As Single
delY = vY1 - vY2
If delY < 10 Then
yStep = 1
ElseIf delY >= 10 And delY < 20 Then
yStep = 2
ElseIf delY >= 20 And delY < 50 Then
yStep = 5
ElseIf delY >= 50 And delY < 200 Then
yStep = 10
ElseIf delY >= 200 And delY < 400 Then
yStep = 20
ElseIf delY >= 400 And delY < 900 Then
yStep = 50
ElseIf delY >= 900 And delY < 2000 Then
yStep = 100
ElseIf delY >= 2000 Then
yStep = 200
End If
delY = vX2 - vX1
If delY < 50 Then
xStep = 1
ElseIf delY >= 60 And delY < 240 Then
xStep = 10
ElseIf delY >= 240 And delY < 480 Then
xStep = 20
ElseIf delY >= 480 And delY < 960 Then
xStep = 60
ElseIf delY >= 960 And delY < 2400 Then
xStep = 120
ElseIf delY >= 2400 Then
xStep = 200
End If
Dim vTmpRate As Single
If xx.SampleRate = 0 Then
vTmpRate = 1
Else
vTmpRate = xx.SampleRate
End If
delY = delY * vTmpRate \ 60
If delY < 1 And delY >= 0 Then
xStep = 0.1 * 60 / vTmpRate
ElseIf delY >= 1 And delY < 10 Then
xStep = 1 * 60 / vTmpRate
ElseIf delY >= 10 And delY < 20 Then
xStep = 2 * 60 / vTmpRate
ElseIf delY >= 30 And delY < 60 Then
xStep = 5 * 60 / vTmpRate
ElseIf delY >= 60 And delY < 120 Then
xStep = 10 * 60 / vTmpRate
ElseIf delY >= 120 And delY < 720 Then
xStep = 60 * 60 / vTmpRate
ElseIf delY >= 720 And delY < 1440 Then
xStep = 120 * 60 / vTmpRate
ElseIf delY >= 1440 And delY < 2880 Then
xStep = 240 * 60 / vTmpRate
ElseIf delY >= 2880 Then
xStep = 480 * 60 / vTmpRate
End If
For i = vX1 To vX2 Step xStep '(vX2 - vX1) / vCols
If i < vX2 Then
Pic.Line (i, vY1)-(i, vY2), &H808080 ' RGB(21, 21, 21)
Pic.CurrentX = i - 100 * xUnit
Pic.CurrentY = vY2 - 100 * yUnit
Pic.Print i * vTmpRate \ 60
End If
Next i
For i = vY2 To vY1 Step yStep '(vY1 - vY2) / vRows
If i < vY1 Then
Pic.Line (vX1, i)-(vX2, i), &H808080 'RGB(21, 21, 21)
Pic.CurrentX = vX1 - 700 * xUnit
Pic.CurrentY = i + 100 * yUnit
Pic.Print Format(CStr(i), "0")
End If
Next i
Pic.Line (vX1, vY1)-(vX2, vY2), &H208820, B For i = vX1 To vX2 Step xStep / 5
Pic.Line (i, vY2)-(i, vY2 - 100 * yUnit), vbRed
Next i
For i = vY2 To vY1 Step yStep / 5
Pic.Line (vX1 - 100 * xUnit, i)-(vX1, i), vbRed
Next i
Dim vFntSize As Integer
vFntSize = Pic.FontSize
Pic.FontSize = 12
Pic.FontBold = True
Pic.CurrentX = vX1 + (vX2 - vX1 - Pic.TextWidth(vXtitle)) * 0.5
Pic.CurrentY = vY2 - 250 * yUnit
Pic.Print vXtitle
Pic.CurrentX = vX1 + (vX2 - vX1 - Pic.TextWidth(vstrTitle)) * 0.5
Pic.CurrentY = vY1 + 300 * yUnit
Pic.Print vstrTitle
Pic.CurrentX = vX1 - Pic.TextWidth(yLabel)
Pic.CurrentY = vY1 + 200 * yUnit
Pic.Print yLabel
Pic.FontBold = False
Pic.FontSize = Pic.FontSize
Form1.Line5(0).Y1 = xx.T1: Form1.Line5(0).Y2 = xx.T1
Form1.Line5(1).Y1 = xx.T2: Form1.Line5(1).Y2 = xx.T2
Form1.Line5(2).Y1 = xx.T3: Form1.Line5(2).Y2 = xx.T3
Form1.Line5(3).Y1 = xx.T4: Form1.Line5(3).Y2 = xx.T4
Form1.Line5(4).Y1 = xx.T5: Form1.Line5(4).Y2 = xx.T5
For i = 0 To 4
If Form1.Line5(i).Y1 > vY1 Or Form1.Line5(i).Y1 < vY2 Then
Form1.Line5(i).Visible = False
Else
Form1.Line5(i).Visible = True
End If
Next i
End Function
DrawGrid Pic3, .vRows, .vCols, .vWL, .vWR, .vHtop - 300, .vHbot + 400, .vX1, .vY1, .vX2, .vY2, "", xLabel, yLabel
DrawGrid Pic3, 10, 10, 800, 200, 200, 900, 0, 300, 1200, 0, "", xLabel, yLabel
請問我該如何解決?請指教附原碼:
DrawGrid (Pic3, .vRows, .vCols, .vWL, .vWR, .vHtop - 300, .vHbot + 400, .vX1, .vY1, .vX2, .vY2, "", xLabel, yLabel)
DrawGrid (Pic3, 10, 10, 800, 200, 200, 900, 0, 300, 1200, 0, "", xLabel, yLabel)
Public Function DrawGrid(Pic As PictureBox, vRows As Single, vCols As Single, _
vWL As Single, vWR As Single, vHtop As Single, vHbot As Single, _
vX1 As Single, vY1 As Single, vX2 As Single, vY2 As Single, vstrTitle As String, vXtitle As String, vYtitle As String)
Dim tX1 As Single, tY1 As Single, tX2 As Single, tY2 As Single
Dim xUnit As Single, yUnit As Single
Dim TmpInt As Integer
Dim yStep As Single
Dim xStep As Single
DrawGrid = 0
Pic.Cls
xUnit = (vX2 - vX1) / (Pic.Width - vWL - vWR)
yUnit = (vY1 - vY2) / (Pic.Height - vHtop - vHbot)
tX1 = vX1 - vWL * xUnit
tY1 = vY1 + vHtop * yUnit
tX2 = vX2 + vWR * xUnit
tY2 = vY2 - vHbot * yUnit
If tY1 = tY2 Then DrawGrid = -1
Exit Function
End If
Pic.Scale (tX1, tY1)-(tX2, tY2)
Dim delY As Single
delY = vY1 - vY2
If delY < 10 Then
yStep = 1
ElseIf delY >= 10 And delY < 20 Then
yStep = 2
ElseIf delY >= 20 And delY < 50 Then
yStep = 5
ElseIf delY >= 50 And delY < 200 Then
yStep = 10
ElseIf delY >= 200 And delY < 400 Then
yStep = 20
ElseIf delY >= 400 And delY < 900 Then
yStep = 50
ElseIf delY >= 900 And delY < 2000 Then
yStep = 100
ElseIf delY >= 2000 Then
yStep = 200
End If
delY = vX2 - vX1
If delY < 50 Then
xStep = 1
ElseIf delY >= 60 And delY < 240 Then
xStep = 10
ElseIf delY >= 240 And delY < 480 Then
xStep = 20
ElseIf delY >= 480 And delY < 960 Then
xStep = 60
ElseIf delY >= 960 And delY < 2400 Then
xStep = 120
ElseIf delY >= 2400 Then
xStep = 200
End If
Dim vTmpRate As Single
If xx.SampleRate = 0 Then
vTmpRate = 1
Else
vTmpRate = xx.SampleRate
End If
delY = delY * vTmpRate \ 60
If delY < 1 And delY >= 0 Then
xStep = 0.1 * 60 / vTmpRate
ElseIf delY >= 1 And delY < 10 Then
xStep = 1 * 60 / vTmpRate
ElseIf delY >= 10 And delY < 20 Then
xStep = 2 * 60 / vTmpRate
ElseIf delY >= 30 And delY < 60 Then
xStep = 5 * 60 / vTmpRate
ElseIf delY >= 60 And delY < 120 Then
xStep = 10 * 60 / vTmpRate
ElseIf delY >= 120 And delY < 720 Then
xStep = 60 * 60 / vTmpRate
ElseIf delY >= 720 And delY < 1440 Then
xStep = 120 * 60 / vTmpRate
ElseIf delY >= 1440 And delY < 2880 Then
xStep = 240 * 60 / vTmpRate
ElseIf delY >= 2880 Then
xStep = 480 * 60 / vTmpRate
End If
For i = vX1 To vX2 Step xStep '(vX2 - vX1) / vCols
If i < vX2 Then
Pic.Line (i, vY1)-(i, vY2), &H808080 ' RGB(21, 21, 21)
Pic.CurrentX = i - 100 * xUnit
Pic.CurrentY = vY2 - 100 * yUnit
Pic.Print i * vTmpRate \ 60
End If
Next i
For i = vY2 To vY1 Step yStep '(vY1 - vY2) / vRows
If i < vY1 Then
Pic.Line (vX1, i)-(vX2, i), &H808080 'RGB(21, 21, 21)
Pic.CurrentX = vX1 - 700 * xUnit
Pic.CurrentY = i + 100 * yUnit
Pic.Print Format(CStr(i), "0")
End If
Next i
Pic.Line (vX1, vY1)-(vX2, vY2), &H208820, B For i = vX1 To vX2 Step xStep / 5
Pic.Line (i, vY2)-(i, vY2 - 100 * yUnit), vbRed
Next i
For i = vY2 To vY1 Step yStep / 5
Pic.Line (vX1 - 100 * xUnit, i)-(vX1, i), vbRed
Next i
Dim vFntSize As Integer
vFntSize = Pic.FontSize
Pic.FontSize = 12
Pic.FontBold = True
Pic.CurrentX = vX1 + (vX2 - vX1 - Pic.TextWidth(vXtitle)) * 0.5
Pic.CurrentY = vY2 - 250 * yUnit
Pic.Print vXtitle
Pic.CurrentX = vX1 + (vX2 - vX1 - Pic.TextWidth(vstrTitle)) * 0.5
Pic.CurrentY = vY1 + 300 * yUnit
Pic.Print vstrTitle
Pic.CurrentX = vX1 - Pic.TextWidth(yLabel)
Pic.CurrentY = vY1 + 200 * yUnit
Pic.Print yLabel
Pic.FontBold = False
Pic.FontSize = Pic.FontSize
Form1.Line5(0).Y1 = xx.T1: Form1.Line5(0).Y2 = xx.T1
Form1.Line5(1).Y1 = xx.T2: Form1.Line5(1).Y2 = xx.T2
Form1.Line5(2).Y1 = xx.T3: Form1.Line5(2).Y2 = xx.T3
Form1.Line5(3).Y1 = xx.T4: Form1.Line5(3).Y2 = xx.T4
Form1.Line5(4).Y1 = xx.T5: Form1.Line5(4).Y2 = xx.T5
For i = 0 To 4
If Form1.Line5(i).Y1 > vY1 Or Form1.Line5(i).Y1 < vY2 Then
Form1.Line5(i).Visible = False
Else
Form1.Line5(i).Visible = True
End If
Next i
End Function
DrawGrid Pic3, .vRows, .vCols, .vWL, .vWR, .vHtop - 300, .vHbot + 400, .vX1, .vY1, .vX2, .vY2, "", xLabel, yLabel
DrawGrid Pic3, 10, 10, 800, 200, 200, 900, 0, 300, 1200, 0, "", xLabel, yLabel
ty2設置為負值即可
怎麼這版連人都沒有啊