Page 1 of 1

Consulta con gráficos.

PostPosted: Thu Aug 18, 2022 8:40 pm
by José Camilo
Hola. Buenas tardes.
Estoy tratando de graficar una información determinada.
he visto en el foro un ejemplo de Cesar (CmSoft), lo he probado y funciona perfecto ( Que NOVEDAD!!! :D ).
Necesito saber como determino los colores en el gráfico de "Torta", pues lo dibuja con colores que no se de donde los toma.
He probado haciendo un dialogo con 3 tipos de gráficos juntos. Linea, Barra y Torta.

en linea pone 1 solo color.
en Barra arma las 4 columnas correspondientes pero a las 4 del mismo color.
en Torta pone los colores que no se de donde salen. 1 color por cada "porción" y me muestra al costado un cuadro referencial con los nombres de cada porción/color, esto en los otros 2 gráficos sólo muestra 1 color.

Alguien me orienta un poco?

Gracias

José Camilo

Re: Consulta con gráficos.

PostPosted: Fri Aug 19, 2022 2:30 pm
by cmsoft
José Camilo:
Los colores del grafico de tortas los toma fijo de un arreglo de colores que estan definidos en la clase
Code: Select all  Expand view
aColor:={RGB( 68, 90,155),RGB(128, 64, 60),RGB( 50,128, 75),RGB(180, 50,130),;
            RGB(218,181, 28),RGB( 34,107,162),RGB(168, 84, 50),RGB(166, 70, 80),;
            RGB( 10,128, 50),RGB(198, 30, 30),RGB(100, 80,100),RGB(120,155, 30) }

(Linea 1954)

Mira el ejemplo en los samples de Fivewin graph.prg
Code: Select all  Expand view
#include "Fivewin.ch"
#include "TGraph.ch"

#Define GRAPH_3D_SI .T.
#Define GRAPH_3D_NO .F.

FUNCTION MAIN()

    LOCAL oDlg, oGraph, oBtn

   #ifdef __CLIPPER__
      SET RESOURCES TO "Test.Dll"
   #else
      SET RESOURCES TO "Test32.Dll"
   #endif

    DEFINE DIALOG oDlg;
           SIZE 600, 500

    @ 3, 1 GRAPH oGraph;
           SIZE 250, 200;
           TYPE GRAPH_TYPE_BAR;
           YVALUES 3D XGRID YGRID XVALUES LEGENDS

//    oGraph:aSeries = { { "Serie 1", CLR_CYAN } }

//                    { cLegend, nColor, nType, l3D }

    oGraph:aSeries = { { "Serie 1", CLR_CYAN , , },;//BAR y 3D por defecto
                       { "Serie 2", CLR_HBLUE, GRAPH_TYPE_LINE, GRAPH_3D_SI },;
                       { "Serie 3", CLR_HRED, GRAPH_TYPE_POINT, GRAPH_3D_NO,.T.,.T.,.T.,"Rojo" } }

    oGraph:aYVals = { "Jan", "Feb", "Mar", "Apr", "May" }

//    oGraph:aData = { { 14280, 20420, 12870, 25347, 7640 } }

    oGraph:aData = { { 14280, 20420, 12870, 25347, 7640 },;
                     { 8350, 10315, 15870, 5347, 12340 },;
                     { 12345, -8945, 10560, 15600, 17610 } }

    oGraph:nClrX = CLR_GREEN
    oGraph:nClrY = CLR_RED
    oGraph:nPoint= 2   //Cross
    oGraph:lLine = .T. //muestra la linea amarilla en BAR
    oGraph:lViewSRLegend = .T.
    oGraph:lViewVal := .t.

    oGraph:cToolTip = {|oGph,nSerie,nPos,nVal| oGph:aSeries[nSerie][1]+CRLF+oGraph:aYVals[nPos]+": "+cValToChar(nVal)}

    @ 0, 0 BTNBMP oBtn RESOURCE "Bars" ACTION ( oGraph:nType := 1, oGraph:Refresh() )
    @ oBtn:nTop, oBtn:nRight+1 BTNBMP oBtn RESOURCE "Lines" PIXEL ACTION ( oGraph:nType := 2, oGraph:Refresh() )
    @ oBtn:nTop, oBtn:nRight+1 BTNBMP oBtn RESOURCE "Points" PIXEL ACTION ( oGraph:nType := 3, oGraph:Refresh() )
    @ oBtn:nTop, oBtn:nRight+1 BTNBMP oBtn RESOURCE "Pie" PIXEL ACTION ( oGraph:nType := 4, oGraph:Refresh() )
    @ oBtn:nTop, oBtn:nRight+1 BTNBMP oBtn RESOURCE "3D" PIXEL ACTION (oGraph:l3D  :=!oGraph:l3D     ,oGraph:Refresh())
    @ oBtn:nTop, oBtn:nRight+1 BTNBMP oBtn RESOURCE "xGrid" PIXEL ACTION (oGraph:lxGrid  :=!oGraph:lxGrid     ,oGraph:Refresh())
    @ oBtn:nTop, oBtn:nRight+1 BTNBMP oBtn RESOURCE "yGrid" PIXEL ACTION (oGraph:lyGrid  :=!oGraph:lyGrid     ,oGraph:Refresh())


    ACTIVATE DIALOG oDlg;
             CENTER

   SET RESOURCES TO

   RETURN NIL

Re: Consulta con gráficos.

PostPosted: Fri Aug 19, 2022 3:36 pm
by José Camilo
Cesar.
MUCHAS GRACIAS por tu tiempo.
Ya lo revise al ejemplo del GRAPH.PRG y no logro terminar de entender algunas cosas. (hasta cambie los colores de la torta) :D :D
He tomado como base tu ejemplo de tiempo atras solo que en el mismo dialogo defino 3 graficos con los mismos datos.
Basicamente tengo que graficar los valores de 4 variable, lo hago asi para las barras, el problema es que cada barra la divide en 4 colores y al ponerles el valor 0 me queda 1/4 de la columna con el color correspondiente pero queda una columna muy fina y no se que hago mal.
Si me puedes orientar mi error te lo agradezco.
los valores son
nVar1 := 5000
nVar2 :=2000
nvar3 := 3000
nVar4 := 3500
cada uno es un proveedor la idea es que arme una columna x cada proveedor con un color distinto.


oGraf2:aSeries = { { "Actual ", CLR_YELLOW , 1, .t. },;
{ "V.María", CLR_RED , 1, .t. },;
{ "V.Nueva", CLR_BLUE , 1, .t. },;
{ "Cordoba", CLR_GREEN , 1, .t. };
}
oGraf2:aData = { { nVar1, 0 , 0 , 0 },;
{ 0 , nVar2 , 0, 0 },;
{ 0, 0 , nVar3, 0 },;
{ 0, 0 , 0, nVar4 } ;
}

oGraf2:lViewVal = .t. // ver valores
oGraf2:lBorders = .t.

oGraf2:aYVals = { "Act","VM","VN","CBA" }

Re: Consulta con gráficos.

PostPosted: Fri Aug 19, 2022 4:32 pm
by cmsoft
Asi?
Image
Este sería el código:
Code: Select all  Expand view

#include "Fivewin.ch"
#include "TGraph.ch"

#Define GRAPH_3D_SI .T.
#Define GRAPH_3D_NO .F.

FUNCTION MAIN()

    LOCAL oDlg, oGraph, oBtn

   #ifdef __CLIPPER__
      SET RESOURCES TO "Test.Dll"
   #else
      SET RESOURCES TO "Test32.Dll"
   #endif

    DEFINE DIALOG oDlg;
           SIZE 600, 500

    @ 3, 1 GRAPH oGraph;
           SIZE 250, 200;
           TYPE 1;
           YVALUES 3D XGRID YGRID XVALUES LEGENDS

//    oGraph:aSeries = { { "Serie 1", CLR_CYAN } }

//                    { cLegend, nColor, nType, l3D }

    oGraph:aSeries = { { "Actual", CLR_CYAN  },;//BAR y 3D por defecto
                       { "V.Maria", CLR_HBLUE },;
                       { "V.Nueva", CLR_HRED } ,;
                       { "Cordoba", CLR_HGREEN } ;
                     }

    oGraph:aYVals = { "Totales" }

//    oGraph:aData = { { 14280, 20420, 12870, 25347, 7640 } }

    oGraph:aData = { {  5000}, {2000} , {3000} ,{ 3500} }
   
    oGraph:lViewSRLegend = .F.
    oGraph:lViewVal := .t.

   
   
    @ 0, 0 BTNBMP oBtn RESOURCE "3D" PIXEL ACTION (oGraph:l3D  :=!oGraph:l3D     ,oGraph:Refresh())
    @ oBtn:nTop, oBtn:nRight+1 BTNBMP oBtn RESOURCE "xGrid" PIXEL ACTION (oGraph:lxGrid  :=!oGraph:lxGrid     ,oGraph:Refresh())
    @ oBtn:nTop, oBtn:nRight+1 BTNBMP oBtn RESOURCE "yGrid" PIXEL ACTION (oGraph:lyGrid  :=!oGraph:lyGrid     ,oGraph:Refresh())


    ACTIVATE DIALOG oDlg;
             CENTER

   SET RESOURCES TO

   RETURN NIL
 

Re: Consulta con gráficos.

PostPosted: Fri Aug 19, 2022 5:22 pm
by José Camilo
Gracias Cesar.
Un abrazo enorme.
Buen finde.

Re: Consulta con gráficos.

PostPosted: Fri Aug 19, 2022 6:14 pm
by José Camilo
Cesar.
Solo para comentarte, en el ejemplo que que pones pasa lo mismo que comente, y es que lo que termina mostrando en el grafico es como esta compuesta la primera columna del grafico, por eso la grilla se vuelve mas grande y los valores se salen de las columnas correspondientes.
el finde semana seguire buscando una solución, si la encuentro te comento.

MUCHISIMAS GRACIAS por tu tiempo.

José Camilo

Re: Consulta con gráficos.

PostPosted: Fri Aug 19, 2022 8:28 pm
by cmsoft
Creo que entiendo lo que explicas..
Es que en realidad, para una muestra del tipo que buscas, habría que crear solo una serie, pero te la mostrará con un solo color
Code: Select all  Expand view
#include "Fivewin.ch"
#include "TGraph.ch"

#Define GRAPH_3D_SI .T.
#Define GRAPH_3D_NO .F.

FUNCTION MAIN()

    LOCAL oDlg, oGraph, oBtn

   #ifdef __CLIPPER__
      SET RESOURCES TO "Test.Dll"
   #else
      SET RESOURCES TO "Test32.Dll"
   #endif

    DEFINE DIALOG oDlg;
           SIZE 600, 500

    @ 3, 1 GRAPH oGraph;
           SIZE 250, 200;
           TYPE 1;
           YVALUES 3D XGRID YGRID XVALUES LEGENDS

//    oGraph:aSeries = { { "Serie 1", CLR_CYAN } }

//                    { cLegend, nColor, nType, l3D }

    oGraph:aSeries = { { "Valores", CLR_CYAN  } ;
                     }

    oGraph:aYVals = { "Actual",  "V.Maria",  "V.Nueva",  "Cordoba"} ;

//    oGraph:aData = { { 14280, 20420, 12870, 25347, 7640 } }

    oGraph:aData = {  { 5000, 2000 , 3000 , 3500 } }
   
    oGraph:lViewSRLegend = .F.
    oGraph:lViewVal := .t.

   
   
    @ 0, 0 BTNBMP oBtn RESOURCE "3D" PIXEL ACTION (oGraph:l3D  :=!oGraph:l3D     ,oGraph:Refresh())
    @ oBtn:nTop, oBtn:nRight+1 BTNBMP oBtn RESOURCE "Lines" PIXEL ACTION ( oGraph:nType := 1, oGraph:Refresh() )
    @ oBtn:nTop, oBtn:nRight+1 BTNBMP oBtn RESOURCE "Points" PIXEL ACTION ( oGraph:nType := 2, oGraph:Refresh() )
    @ oBtn:nTop, oBtn:nRight+1 BTNBMP oBtn RESOURCE "Pie" PIXEL ACTION ( oGraph:nType := 4, oGraph:Refresh() )
    @ oBtn:nTop, oBtn:nRight+1 BTNBMP oBtn RESOURCE "xGrid" PIXEL ACTION (oGraph:lxGrid  :=!oGraph:lxGrid     ,oGraph:Refresh())
    @ oBtn:nTop, oBtn:nRight+1 BTNBMP oBtn RESOURCE "yGrid" PIXEL ACTION (oGraph:lyGrid  :=!oGraph:lyGrid     ,oGraph:Refresh())


    ACTIVATE DIALOG oDlg;
             CENTER

   SET RESOURCES TO

   RETURN NIL

Re: Consulta con gráficos.

PostPosted: Fri Aug 19, 2022 9:13 pm
by José Camilo
Cesar.
Eso es lo que no entendia.
Gracias por la explicación.

ahora si Buen FINDE!!!! :D :D

José Camilo