用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