RANGO DE VALORES DE Y EN TGRAH

RANGO DE VALORES DE Y EN TGRAH

Postby joseluisysturiz » Sun Jul 21, 2019 11:02 pm

Saludos, he buscado en la clase y por todo el foro, pero de verdad no consigo como colocar los RANGOS de los valores de Y en TGraph, estoy haciendo grafica de barras y necesito que los valores de Y sean de 500 en 500, ya que veo que lo que haces es colocar los valores de la DATA hasta el de valor maximo, probe con nMax y no hace nada, alguna idea.? saludos...gracias... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: RANGO DE VALORES DE Y EN TGRAH

Postby joseluisysturiz » Tue Jul 23, 2019 3:27 pm

Saludos, por lo visto a nadie le ha importado lo de los rangos de valores de Y con la TGRAPH.? o es que no se pueden cambiar.? me gustaria por lo menos un comentario para ver que hago, si cambio de clase o que...saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: RANGO DE VALORES DE Y EN TGRAH

Postby cnavarro » Tue Jul 23, 2019 4:20 pm

Creo recordar que es la data aYVals, pero nunca la he tocado
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6552
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: RANGO DE VALORES DE Y EN TGRAH

Postby AngelSalom » Tue Jul 23, 2019 8:08 pm

No creo que la clase lo permita. Revisa el método XYmax_min de la clase. Si te fijas calcula los valores a partir del máximo y mínimo de los datos pasados y establece el rango de la Y , deberías jugar con ese método para lo que necesitas.
Angel Salom
Visionwin Software - https://www.visionwin.com
------------------------------------------------------------
fwh 19.05 - harbour 3.2 - bcc 7.4
User avatar
AngelSalom
 
Posts: 727
Joined: Fri Oct 07, 2005 7:38 am
Location: Benicarló (Castellón ) - España

Re: RANGO DE VALORES DE Y EN TGRAH

Postby joseluisysturiz » Tue Jul 23, 2019 9:04 pm

cnavarro wrote:Creo recordar que es la data aYVals, pero nunca la he tocado


Saludos Navarro, la aYVals lo que veo qe maneja son los nombre de los valores a graficar, lo que necesito es que los valores que se muestran en el EJE Y (verticalmente), inicien en 0 y de 500 en 500 hasta el valor maximo de la data.

Ya consegui quien manipula esa informacion, nMin y nMax, nMin toma el valor minimo de la DATA mas alta y nMax el valor mas alto, y entonces crea los rangos de Y, haciendo nMin++ hasta nMax, yo necesito que inicie nMin en 500 y vata de 500 en 500 hasta nMax, ya lo cambie en mi sistema haciendo esto oGraph:nMinVal := 500 y no lo respeta, consegui en TGraph una funcion DetMinVal(nNum) que parece es la que hace dicho calculo (Nueva funcion, para cuando TODOS los valores de la grafica sean mayores a cero (>0)), pero hice cambios y nada, cualquier ayuda seria muy agradecida...saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: RANGO DE VALORES DE Y EN TGRAH

Postby joseluisysturiz » Wed Jul 24, 2019 12:36 am

Creo que esta imagen sera mas clara que lo que explico...gracias...saludos... :shock:

[img]
Image
[/img]
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: RANGO DE VALORES DE Y EN TGRAH

Postby armando.lagunas » Wed Jul 24, 2019 2:17 pm

mi resultado:

imagen original

Image

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  Expand view  RUN
     
                oGraph:aData   := { aPrecX }        <-- array con los valores
                oGraph:nMaxVal := 5000            <-- fijo el valor a este
                oGraph:Refresh()
 



Imagen del resultado

Image


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  Expand view  RUN

...
...
...

   // 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
SkyPe: armando.lagunas@hotmail.com
Mail: armando.lagunas@gmail.com
User avatar
armando.lagunas
 
Posts: 346
Joined: Mon Oct 05, 2009 3:35 pm
Location: Curico-Chile

Re: RANGO DE VALORES DE Y EN TGRAH

Postby joseluisysturiz » Wed Jul 24, 2019 2:53 pm

Saludos, Angel, Armando Laguna, en ese methodo es que estoy haciendo las pruebas, funciones DetMaxVal y DetMinVal, aunque tiene logica lo que dices Armando, yo deberia poder decir simplemente como quiero mis rangos de Y, es como ver una inyectadora, tiene separadores de 1CC en 1CC y tambien 0.5CC, no importa la cantidad que contenga, uno le carga guiandose por los valores prederterminados, o el ejemplo de un METRO para medir, dividio en pulgadas o centimetros dependiendo de la forma de medir deseada, el punto es que no veo viable que se creen los valores Z dependiendo de Min y Max ya que cuando igual hay un valor a graficar por debajo de min no muestra en Z ese valor y solo tengo la linea horizontal que me hace calcular al ojo porciento el presunto valor, tampoco veo como colocar los valores graficados sobre las barras, eso tambien por los momentos ayudaria un poco, ya que el cliente quiere saber con exactitud el valor graficado y no tener que estar adivinando o presumiendo el valor por ser muy algo o muy bajo los rangos, igual vere si puedo mdificar el methodo que dices, no conozco mucho el manejo de clases en su interior, pero creo que solo debo es modificar la forma de calcular Min y Max, gracias por sus aporte, saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: RANGO DE VALORES DE Y EN TGRAH

Postby cnavarro » Wed Jul 24, 2019 3:37 pm

joseluisysturiz wrote:Creo que esta imagen sera mas clara que lo que explico...gracias...saludos... :shock:

[img]
Image
[/img]

En este mismo gráfico, sin modificar la clase, al final de la definición del gráfico, pon esto y vamos afinando el tema
Code: Select all  Expand view  RUN

oGraph:nXRanges  := 6
 


Pero lo que me tienes que explicar bien es el por qué necesitas modificar los valores min y max calculados por la propia clase
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6552
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: RANGO DE VALORES DE Y EN TGRAH

Postby joseluisysturiz » Wed Jul 24, 2019 5:37 pm

Navarro, el valor exacto para esta grafica es oGraph:nXRanges := 5.4, alli esta la muestra, me doy cuenta que para que haya este resultado o una aproximacion al valor requerido(500) en los rangos de Y se divive el valor maximo de la data mas alta entre el valor deseado(500) y Ej. 2660/500 = 5.32, redondeando hacia arriba 5.4, el detalle es saber quien contiene el valor maximo de la data mas alta, pero por alli como dices, va el tiro.

Si por mi fuese lo dejase como esta, pero EL CLIENTE requiere que sea rangos de 500, como comente anteriormente para poder divisar mejor el valor graficado, tambien comente que si hubiece alguna forma que no la he conseguio de colocar sobre la barra el monto graficado, en el ejemplo mostrado, laminados(225, 450, 675) y el vinil(950, 285, 950, 475, 2660), creo que seria una buena idea y el cliente estaria algo satisfecho.

Revisando en el foro vi una grafica de un colega que sus valores Y van de 250 en 250, aunque sus valores graficados son mas altos y mas bajos, pero ahora no consigo cual fue, por eso asumi que seria algo relativamente facil, seguire buscando a ver si puede comentar como lo hizo, espero tus comentarios y sugerencias...gracias...saludos.. :shock:

[img]
https://i.ibb.co/wpL8m5g/grafica-500.jpg
[/img]
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: RANGO DE VALORES DE Y EN TGRAH

Postby cnavarro » Wed Jul 24, 2019 5:55 pm

Bien, como te he dicho, intentemos ir solucionando temas paso a paso
Ahora, a continuación de la definición del gráfico, pon esto
Code: Select all  Expand view  RUN

   @ nT, nL GRAPH oGraph SIZE Int( nW / 2 ) - 2, nH PIXEL OF oP ;
      TITLE "Sales and Costs" ;
      XVALUES YVALUES LEGENDS

   // pon esto nada más definir el gráfico
   // si lo pones después de definir las series no te va a funcionar
   oGraph:lViewVal := .T.

 

Prueba y dime
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6552
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: RANGO DE VALORES DE Y EN TGRAH

Postby cnavarro » Wed Jul 24, 2019 6:07 pm

Por cierto, si al final de la definición de todos los parámetros, datas, etc del gráfico, asigno el max value, me respeta dicho valor y en la gráfica me aparece ese valor máximo en el eje Y.
Para implementarlo, si quieres que los intervalos sean siempre con un valor fijo ( creo que has dicho 500 ), es hacer la operacion que has indicado antes para calcular el numero de nXRanges, coger su valor entero, sumarle 1 y ese valor multiplicarlo por 500, tendría el mismo efecto me parece a mi.

Code: Select all  Expand view  RUN


      oGraph:nXRanges  := 8
      // Esto
      oGraph:nMaxVal   := 3000

 
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6552
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: RANGO DE VALORES DE Y EN TGRAH

Postby joseluisysturiz » Wed Jul 24, 2019 6:49 pm

cnavarro wrote:Bien, como te he dicho, intentemos ir solucionando temas paso a paso
Ahora, a continuación de la definición del gráfico, pon esto
Code: Select all  Expand view  RUN

   @ nT, nL GRAPH oGraph SIZE Int( nW / 2 ) - 2, nH PIXEL OF oP ;
      TITLE "Sales and Costs" ;
      XVALUES YVALUES LEGENDS

   // pon esto nada más definir el gráfico
   // si lo pones después de definir las series no te va a funcionar
   oGraph:lViewVal := .T.

 

Prueba y dime


Navarro, haciendo lo que sugieres da este error
Code: Select all  Expand view  RUN

   Error occurred at: 24/07/2019, 14:40:10
   Error description: Error BASE/1066  Error de argumento: condicional
   Args:
     [   1] = U  

Stack Calls
===========
   Called from: .\source\classes\TGRAPH.PRG => TGRAPH:PAINT( 1289 )
   Called from: .\source\classes\TGRAPH.PRG => (b)TGRAPH( 135 )
   Called from: .\source\classes\TGRAPH.PRG => TGRAPH:DISPLAY( 0 )
   Called from: .\source\classes\CONTROL.PRG => TGRAPH:HANDLEEVENT( 1767 )
   Called from: .\source\classes\WINDOW.PRG => _FWH( 3541 )
 


coloque la linea en diferentes partes y siempre el mismo error, es mas esa DATA es usada aca
AAdd( ::aSeries, { cLegend, nColor, nType, l3D, lViewVal, lDrawPoint, lDrawLine, cSRLegend } )

la puse en .t. y no dio error pero tampoco coloco los valores sobre las barras que imagino era la idea, voy probar lo que sugieres en tu otra respuesta, saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: RANGO DE VALORES DE Y EN TGRAH

Postby cnavarro » Wed Jul 24, 2019 6:55 pm

Qué versión de Fw utilizas?, porque a mi me funciona correctamente y no entiendo por qué te da error
Precisamente porque es utilizada como parámetro en el ADDSeries es por lo que hay que darle ese valor antes que nada
Cristobal Navarro
Hay dos tipos de personas: las que te hacen perder el tiempo y las que te hacen perder la noción del tiempo
El secreto de la felicidad no está en hacer lo que te gusta, sino en que te guste lo que haces
User avatar
cnavarro
 
Posts: 6552
Joined: Wed Feb 15, 2012 8:25 pm
Location: España

Re: RANGO DE VALORES DE Y EN TGRAH

Postby joseluisysturiz » Wed Jul 24, 2019 7:09 pm

cnavarro wrote:Qué versión de Fw utilizas?, porque a mi me funciona correctamente y no entiendo por qué te da error
Precisamente porque es utilizada como parámetro en el ADDSeries es por lo que hay que darle ese valor antes que nada

Version en uso es 19.01, a menos que sea algo nuevo que tengas en tu clase TGraph y yo no tenga, si puedes enviame tu TGraph a joseluisysturiz@yahoo.com, gracias

Asi lo tengo apenas defino
Code: Select all  Expand view  RUN

oGraph:lViewVal := .t. // SUGERIDO X NAVARRO - 24/07/2019
   oGraph:cTitle   := "METROS VENTAS MENSUALES " + cValToChar( Year( Date() ) ) // 19/06/2019
   oGraph:cTitX    := "Montos Metros" // TITULO VER. - 19/06/2019
   oGraph:cTitY    := "Meses" // TITULO HOR. - 19/06/2019
   oGraph:nBarSep  := 10 // Separador entre barras 1 - 19/06/2019
   oGraph:lxGrid   := .t. // Rejilla en X .t. - 19/06/2019
   oGraph:lyGrid   := .t. // Rejilla en Y .t. - 19/06/2019
   oGraph:nClrX    := CLR_GREEN // COLOR TEXTO X
   oGraph:nClrY    := CLR_RED // COLOR TEXTO Y
   oGraph:lLegends := .t. // MOSTRAR O NO LEYENDA - 19/06/2019
   oGraph:lxVal    := .t. // Mostrar valores en X .t. - 21/06/2019
   oGraph:lyVal    := .t. // Mostrar etiquetas en Y .t. - 19/06/2019
   oGraph:lBorders := .f. // Bordes en gráfico de barras .f. - 19/06/2019
   oGraph:lSelView := .f. // Seleccionar opción 'Ver' .t. - EN EL MENU POPUOP - 19/06/2019
   oGraph:lSelBack := .f. // Seleccionar opción 'Fondo' .t.
 
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 95 guests