]> git.llucax.com Git - mecon/meconlib.git/blob - lib/MECON/Graph.php
c4e52d6d08d87d5faa36ace1aa094bb79891bd4e
[mecon/meconlib.git] / lib / MECON / Graph.php
1 <?php /* vim: set binary expandtab tabstop=4 shiftwidth=4 textwidth=80:
2 -------------------------------------------------------------------------------
3                              Ministerio de Economía
4                                     meconlib
5 -------------------------------------------------------------------------------
6 This file is part of meconlib.
7
8 meconlib is free software; you can redistribute it and/or modify it under
9 the terms of the GNU General Public License as published by the Free
10 Software Foundation; either version 2 of the License, or (at your option)
11 any later version.
12
13 meconlib is distributed in the hope that it will be useful, but WITHOUT
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16  
17 You should have received a copy of the GNU General Public License; if not,
18 write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
19 Boston, MA  02111-1307  USA
20 -------------------------------------------------------------------------------
21 Creado: Tue Nov 26 12:45:31 2003
22 Autor:  Manuel Nazar Anchorena <manazar@mecon.gov.ar>
23 -------------------------------------------------------------------------------
24 $Id: Graph.php 428 2003-11-18 14:30:30Z mmarre $
25 -----------------------------------------------------------------------------*/
26
27 require_once 'MECON/Graph/external/jpgraph/src/jpgraph.php';
28
29 /**
30  * Liberia base para el manejo de graficos.  
31  */
32 class MECON_Graph {
33
34
35     /**
36      * Tipo del grafico (xy, torta, gantt)
37      * @var int $ancho
38      * @access private
39      */
40     var $_tipo;
41     
42
43     /**
44      * Ancho del grafico.
45      * @var int $ancho
46      * @access private
47      */
48     var $_ancho;
49     
50     /**
51      * Alto del grafico.
52      * @var int $alto
53      * @access private
54      */
55     var $_alto;
56
57      /**
58      * El grafico propiamente dicho.
59      * @var Graph $grafico
60      * @access private
61      */
62     var $_grafico;
63
64     /**
65      * Booleano que define si se muestran o no los valores
66      * @var bool $verValores
67      * @access private
68      */
69     var $_verValores;
70
71     /**
72      * Class constructor.
73      *
74      * @param string $tipo Tipo de grafico(xy,torta,torta3D,gantt)
75      * @param int $ancho Ancho del grafico
76      * @param int $alto Alto del grafico
77      * @param string $titulo Titulo del grafico.
78      * @param array $attrib_gral Contiene opciones generales para el grafico.
79      *
80      * @return void
81      * @access public
82      */
83     function MECON_graph($tipo, $ancho=300, $alto=200,$titulo,$attrib_gral=NULL)
84     {    
85         $this->_tipo=$tipo;
86         $this->_ancho= $ancho;
87         $this->_alto= $alto;
88         
89         if (isset($attrib_gral['verValores']))
90             $this->_verValores= $attrib_gral['verValores'];
91         
92         if($this->_tipo=="xy")
93         {
94             $this->_grafico= new Graph($ancho,$alto,"auto");
95             $this->_grafico->SetScale("textlin");
96
97             if (isset($attrib_gral['Xtitulo']))
98                 $this->_grafico->xaxis->title->Set($attrib_gral['Xtitulo']);
99         
100             if (isset($attrib_gral['Ytitulo']))
101                 $this->_grafico->yaxis->title->Set($attrib_gral['Ytitulo']);
102         
103             if (isset($attrib_gral['XEtiquetas']))
104                 $this->_grafico->xaxis->SetTickLabels($attrib_gral['XEtiquetas']);
105         }
106
107         if(($this->_tipo=="torta")||($this->_tipo=="torta3D"))
108         {
109             require_once 'MECON/Graph/external/jpgraph/src/jpgraph_pie.php';
110             require_once 'MECON/Graph/external/jpgraph/src/jpgraph_pie3d.php';
111             
112             $this->_grafico= new PieGraph($ancho,$alto);
113             
114         }
115       
116         //Atributos en comun
117         
118         if (isset($titulo))
119             $this->_grafico->title-> Set($titulo);
120         if (isset($attrib_gral['subTitulo']))
121             $this->_grafico->subtitle->Set($attrib_gral['subTitulo']);
122         if ($attrib_gral['verSombra']==true)
123         {
124             $this->_grafico->SetShadow();
125         }
126         
127        }
128
129
130     /**
131      * Agrega Secuencia de datos.
132      *
133      * @param array $tipo Tipo de grafico para la secuencia
134      * @param array $secuencia Datos del arreglo
135      * @param array $atributos Atributos especiales para la secuencia
136      *
137      * Tipos de secuencias para gráficos xy:
138      * - lineas
139      * - barras
140      * - puntos
141      *
142      * Atributos:
143      * - color
144      * - colorRelleno
145      * - leyenda
146      * - impulso ("si") (solamente para puntos)
147      * - tipoMarca (de 1 a 17) (solamente para puntos)
148      *
149      * @return void
150      * @access public
151      */
152     function agregarSecuencia($tipo,$secuencia,$atributos=NULL)
153     {
154         if($this->_tipo=="xy")
155         {
156             $valido=false;
157         
158             if ($tipo=="lineas")
159             {
160                 $valido=true;
161                 require_once 'MECON/Graph/external/jpgraph/src/jpgraph_line.php';
162                 $plot= new LinePlot($secuencia);
163                 if ($this->_verValores)
164                     $plot->value->Show();
165
166                 if (isset($atributos['colorRelleno']))
167                 {
168                     $plot->SetFillColor($atributos['colorRelleno']);
169                 }
170  
171             }
172         
173         
174             if ($tipo=="barras")
175             {
176                 $valido=true;
177                 require_once 'MECON/Graph/external/jpgraph/src/jpgraph_bar.php';
178                 $plot= new BarPlot($secuencia);
179                 if ($this->_verValores)
180                     $plot->value->Show();
181
182                 if (isset($atributos['colorRelleno']))
183                 {
184                     $plot->SetFillColor($atributos['colorRelleno']);
185                 }
186
187             }
188         
189             if ($tipo=="puntos")
190             {
191                 $valido=true;
192                 require_once 'MECON/Graph/external/jpgraph/src/jpgraph_scatter.php';
193                 $plot= new ScatterPlot($secuencia);
194                 if ($this->_verValores)
195                     $plot->value->Show();
196     
197                 if (isset($atributos['colorRelleno'])){
198                     $plot->mark->SetFillColor($atributos['colorRelleno']);
199                 }    
200             
201                 if (isset($atributos['tipoMarca'])){
202                     $plot->mark->SetType($atributos['tipoMarca']);
203                 }    
204             
205                 if (isset($atributos['impulso']))
206                 {
207                     if ($atributos['impulso']=="si")
208                         $plot->SetImpuls();
209                 }
210             }
211         
212             // Seteo opciones generales
213             if (isset($atributos['color']))
214             {
215                 $plot->SetColor($atributos['color']);
216             }
217             if (isset($atributos['leyenda']))
218             {
219                 $plot->SetLegend($atributos['leyenda']);
220                 //$this->_grafico->legend->SetLayout(LEGEND_HOR);
221                 $this->_grafico->legend->Pos(0.02,0.01);
222             }
223
224
225             //Si hubo error
226             if ($valido==false)
227             { 
228                 die ("Error: Tipo de grafico $tipo no valido (aun)");
229             }
230         }//del if tipo xy
231
232         
233         if(($this->_tipo=="torta")||($this->_tipo=="torta3D"))
234         {
235             if($this->_tipo=="torta")
236                 $plot= new PiePlot($secuencia);
237             
238             if($this->_tipo=="torta3D")
239                 $plot= new PiePlot3D($secuencia);
240                 
241             if ($this->_verValores)
242                 $plot->value->Show();
243  
244         
245             if (isset($atributos['leyendas']))
246             {
247                 $plot->SetLegends($atributos['leyendas']);
248             }
249
250             if (isset($atributos['centro']))
251             {
252                 $x=$atributos['centro'][0];
253                 $y=$atributos['centro'][1];
254                 $plot->SetCenter($x,$y);
255             }
256
257         }
258
259         $this->_grafico->Add($plot);
260
261     }
262
263
264    
265     /**
266      * Genera el grafico y lo dibuja.
267      *
268      * @return void
269      * @access public
270      */
271     function generar()
272     {
273         $this->_grafico->Stroke();
274     }
275
276
277 }