Consulta con gráficos.

Consulta con gráficos.

Postby José Camilo » Thu Aug 18, 2022 8:40 pm

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
José Camilo
 
Posts: 210
Joined: Wed Apr 07, 2021 3:56 pm

Re: Consulta con gráficos.

Postby cmsoft » Fri Aug 19, 2022 2:30 pm

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  RUN
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  RUN
#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
User avatar
cmsoft
 
Posts: 1291
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Consulta con gráficos.

Postby José Camilo » Fri Aug 19, 2022 3:36 pm

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" }
José Camilo
 
Posts: 210
Joined: Wed Apr 07, 2021 3:56 pm

Re: Consulta con gráficos.

Postby cmsoft » Fri Aug 19, 2022 4:32 pm

Asi?
Image
Este sería el código:
Code: Select all  Expand view  RUN

#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
 
User avatar
cmsoft
 
Posts: 1291
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Consulta con gráficos.

Postby José Camilo » Fri Aug 19, 2022 5:22 pm

Gracias Cesar.
Un abrazo enorme.
Buen finde.
José Camilo
 
Posts: 210
Joined: Wed Apr 07, 2021 3:56 pm

Re: Consulta con gráficos.

Postby José Camilo » Fri Aug 19, 2022 6:14 pm

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
José Camilo
 
Posts: 210
Joined: Wed Apr 07, 2021 3:56 pm

Re: Consulta con gráficos.

Postby cmsoft » Fri Aug 19, 2022 8:28 pm

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  RUN
#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
User avatar
cmsoft
 
Posts: 1291
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Consulta con gráficos.

Postby José Camilo » Fri Aug 19, 2022 9:13 pm

Cesar.
Eso es lo que no entendia.
Gracias por la explicación.

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

José Camilo
José Camilo
 
Posts: 210
Joined: Wed Apr 07, 2021 3:56 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 47 guests