mi resultado:
imagen original
revisé la clase y según veo el valor minino y máximo, solo ve la coordenada de donde empieza a graficar y no la escala y que siempre parte de 0, y mueve el eje si los números son Positivos y negativos.
fijé a un valor entero y la grafica solo se movió, yo lo fije a 5000 para el ejemplo,
Codigo:
Code: Select all
oGraph:aData := { aPrecX } <-- array con los valores
oGraph:nMaxVal := 5000 <-- fijo el valor a este
oGraph:Refresh()
Imagen del resultado
la escala es calculada segun los valores que obtenga la clase, y eso es logico para mi, ya que no tengo certeza alguna que los valores que grafico son positivos o negativos, valores grandes o pequeños.
si lo que realmente quieres que sea una escala fija, 50 en 50, 100 en 100, 500 en 500, etc... deberías de modificar la clase a tu necesidad, en el método paint() esta el calculo de la escala, tendrias que revisar los valores de las variables y realizar el calculo necesario.
Code: Select all
...
...
...
// Max, Min values
nMax := IF( ::nMaxVal <> 0 , ::nMaxVal , 0 )
FOR nJ := 1 TO Len( ::aSeries )
FOR nI :=1 TO Len( ::aData[nJ] )
nMax := Max( ::aData[nJ][nI], nMax )
NEXT nI
NEXT nJ
nMin := IF( ::nMinVal <> 0 , ::nMinVal , 0 )
FOR nJ := 1 TO Len( ::aSeries )
FOR nI :=1 TO Len( ::aData[nJ] )
nMin := Min( ::aData[nJ][nI], nMin )
NEXT nI
NEXT nJ
nXMax := IF( nMax > 0, DetMaxVal( nMax ), 0 )
nXMin := IF( nMin < 0, DetMaxVal( nMin ), 0 )
nHigh := nXMax + nXMin
nMax := Max( nXMax, nXMin )
nRel:= IF( nHigh>0, nMaxBar / nHigh , 1 )
nMaxBar := nMax * nRel
// Zero pos
//
nZero:=Max(nBottom+(nXMin*-1*nRel),IF(nXMax>0,nTop+(nXMax*nRel)+nDeep,0))
IF l3D
FOR nI := 1 TO nDeep+1
::DrawLine(nZero-nI+1, nLeft-nDeep+nI, nZero-nI+1, nRight-nDeep+nI, CLR_HGRAY)
NEXT nI
ENDIF
aPoint := Array( Len( ::aSeries ), Len( ::aData[1] ), 2 )
nRange := IF( ::nXRanges>0, nMax / ::nXRanges, 1)
// Calculate data ranges
FOR nI = 1 TO ::nXRanges
AAdd( aRange, nRange * nI )
NEXT nI
AAdd( aRange, nMax )
// xValues
//
nRPos := nRNeg := nZero - nDeep
FOR nI := 0 TO ::nXRanges
IF lxVal
IF nXMax >= nRange*nI
::Say( nRPos+nDeep-5, nLeft-nDeep-10, Tran( nRange* nI, ::cPicture ), ;
::aFont[2], ::nClrX, ::nTRight )
ENDIF
IF nXMin*-1 <= nRange*-nI
::Say( nRNeg+nDeep-5, nLeft-nDeep-10, Tran( nRange*-nI, ::cPicture ), ;
::aFont[2], ::nClrX, ::nTRight )
ENDIF
ENDIF
IF ::lxGrid
IF nXMax > nRange*nI
::DrawLine( nRPos+nDeep, nLeft-nDeep, nRPos, nLeft, ::nClrGrid, ::lDotted )
::DrawLine( nRPos, nLeft, nRPos, nRight, ::nClrGrid, ::lDotted )
ENDIF
IF nXMin*-1 < nRange*-nI
::DrawLine( nRNeg+nDeep, nLeft-nDeep, nRNeg, nLeft, ::nClrGrid, ::lDotted )
::DrawLine( nRNeg, nLeft, nRNeg, nRight, ::nClrGrid, ::lDotted )
ENDIF
ENDIF
nRPos -= ( nMaxBar / ::nXRanges )
nRNeg += ( nMaxBar / ::nXRanges )
NEXT nI
IF !lxVal
::Say( nZero-5, nLeft-nDeep-3, "0", ::aFont[8], ::nClrV, ::nTRight)
ENDIF
...
...
saludos