1 <?php /* vim: set binary expandtab tabstop=4 shiftwidth=4 textwidth=80:
2 -------------------------------------------------------------------------------
5 -------------------------------------------------------------------------------
6 This file is part of meconlib.
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)
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.
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 -----------------------------------------------------------------------------*/
27 require_once 'MECON/Graph/external/jpgraph/src/jpgraph.php';
30 * Liberia base para el manejo de graficos.
36 * Tipo del grafico (xy, torta, gantt)
58 * El grafico propiamente dicho.
65 * Booleano que define si se muestran o no los valores
66 * @var bool $verValores
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 gráfico.
80 * Opciones generales para gráficos XY:
81 * - XTitulo (Título del Eje X)
82 * - YTitulo (Título del Eje Y)
83 * - XEtiquetas (Array de Referencias del eje X)
84 * - XEtiquetasRotar (Rota las etiquetas del eje X en 90 grados)
85 * - margenes (array asociativo con alguna/s de las siguientes claves:
86 * - L (margen izquierdo)
87 * - R (margen derecho)
88 * - T (margen superior)
89 * - B (margen inferior))
94 function MECON_graph($tipo, $ancho=300, $alto=200,$titulo,$attrib_gral=NULL)
97 $this->_ancho= $ancho;
100 if (isset($attrib_gral['verValores']))
101 $this->_verValores= $attrib_gral['verValores'];
103 if($this->_tipo=="xy")
105 $this->_grafico= new Graph($ancho,$alto,"auto");
106 $this->_grafico->SetScale("textlin");
108 if (isset($attrib_gral['Xtitulo']))
109 $this->_grafico->xaxis->title->Set($attrib_gral['Xtitulo']);
111 if (isset($attrib_gral['Ytitulo']))
112 $this->_grafico->yaxis->title->Set($attrib_gral['Ytitulo']);
114 if (isset($attrib_gral['XEtiquetas']))
115 $this->_grafico->xaxis->SetTickLabels($attrib_gral['XEtiquetas']);
117 if (isset($attrib_gral['XEtiquetasRotar']))
118 $this->_grafico->xaxis->label_angle = 90;
121 if(($this->_tipo=="torta")||($this->_tipo=="torta3D"))
123 require_once 'MECON/Graph/external/jpgraph/src/jpgraph_pie.php';
124 require_once 'MECON/Graph/external/jpgraph/src/jpgraph_pie3d.php';
126 $this->_grafico= new PieGraph($ancho,$alto);
133 $this->_grafico->title-> Set($titulo);
134 if (isset($attrib_gral['subTitulo']))
135 $this->_grafico->subtitle->Set($attrib_gral['subTitulo']);
136 if (isset($attrib_gral['verSombra']) and $attrib_gral['verSombra']==true)
137 $this->_grafico->SetShadow();
139 if (isset($attrib_gral['margenes'])){
140 if (isset($attrib_gral['margenes']['L']))
141 $this->_grafico->img->left_margin = $attrib_gral['margenes']['L'];
143 if (isset($attrib_gral['margenes']['R']))
144 $this->_grafico->img->right_margin = $attrib_gral['margenes']['R'];
146 if (isset($attrib_gral['margenes']['T']))
147 $this->_grafico->img->top_margin = $attrib_gral['margenes']['T'];
149 if (isset($attrib_gral['margenes']['B']))
150 $this->_grafico->img->bottom_margin = $attrib_gral['margenes']['B'];
157 * Agrega Secuencia de datos.
159 * @param array $tipo Tipo de grafico para la secuencia
160 * @param array $secuencia Datos del arreglo
161 * @param array $atributos Atributos especiales para la secuencia
163 * Tipos de secuencias para gráficos xy:
170 * - colorRelleno (solamente barras y puntos)
172 * - impulso ("si") (solamente para puntos)
173 * - tipoMarca (de 1 a 17) (solamente para puntos)
174 * - etiquetas (array) (para gráficos de torta muestra las etiquetas
175 * en lugar de los porcentajes)
176 * - tema ("earth", "pastel", "water", "sand")
177 * (para gráficos de torta, permite cambiar el esquema de colores)
178 * (es "earth" por default)
179 * - explotar (para torta y torta3D) (valor que indica la separación de
180 * de las porciones de la torta)
181 * - posLeyenda (array con dos coordenadas para la posición de la leyenda)
182 * - formatoValores (string con el formato que se quiere dar a los valores
184 * - noAgregar (Si está seteado indica que la secuencia se genera pero no
185 * se agrega al gráfico. Se utiliza para gráficos de barras
186 * acumulativos, donde las secuencias deben agregarse todas
192 function agregarSecuencia($tipo,$secuencia,$atributos=NULL)
194 if($this->_tipo=="xy")
201 require_once 'MECON/Graph/external/jpgraph/src/jpgraph_line.php';
202 $plot= new LinePlot($secuencia);
204 if (isset($atributos['colorRelleno']))
205 $plot->SetFillColor($atributos['colorRelleno']);
212 require_once 'MECON/Graph/external/jpgraph/src/jpgraph_bar.php';
213 $plot= new BarPlot($secuencia);
215 if (isset($atributos['colorRelleno']))
216 $plot->SetFillColor($atributos['colorRelleno']);
223 require_once 'MECON/Graph/external/jpgraph/src/jpgraph_scatter.php';
224 $plot= new ScatterPlot($secuencia);
226 if (isset($atributos['tipoMarca']))
227 $plot->mark->SetType($atributos['tipoMarca']);
229 if (isset($atributos['impulso']))
231 if ($atributos['impulso']=="si")
240 // Seteo opciones generales
241 if (isset($atributos['formatoValores']))
242 $plot->value->format = $atributos['formatoValores'];
244 if ($this->_verValores)
245 $plot->value->Show();
247 if (isset($atributos['color']))
248 $plot->SetColor($atributos['color']);
250 if (isset($atributos['leyenda']))
252 $plot->SetLegend($atributos['leyenda']);
253 //$this->_grafico->legend->SetLayout(LEGEND_HOR);
254 $this->_grafico->legend->Pos(0.02,0.01);
259 trigger_error ("Error: Tipo de grafico $tipo no valido (aun)", E_USER_ERROR);
264 if(($this->_tipo=="torta")||($this->_tipo=="torta3D"))
266 if($this->_tipo=="torta")
267 $plot= new PiePlot($secuencia);
269 if($this->_tipo=="torta3D")
270 $plot= new PiePlot3D($secuencia);
272 // Esto lo agrego porque si no, no redondea a 100%
273 $plot->labeltype = 2;
275 if ($this->_verValores)
276 $plot->value->Show();
278 if (isset($atributos['leyendas']))
279 $plot->SetLegends($atributos['leyendas']);
281 if (isset($atributos['tema']))
282 $plot->SetTheme($atributos['tema']);
284 if (isset($atributos['etiquetas']))
285 $plot->SetLabels($atributos['etiquetas']);
287 if (isset($atributos['centro']))
289 $x=$atributos['centro'][0];
290 $y=$atributos['centro'][1];
291 $plot->SetCenter($x,$y);
294 if (isset($atributos['explotar']))
295 $plot->ExplodeAll($atributos['explotar']);
300 if (isset($atributos['posLeyenda']))
302 $this->_grafico->legend->xpos = $atributos['posLeyenda'][0];
303 $this->_grafico->legend->ypos = $atributos['posLeyenda'][1];
306 if (!isset($atributos['noAgregar']))
307 $this->_grafico->Add($plot);
314 * Acumula las secuencias para generar un gráfico acumulativo de barras
318 * require_once 'MECON/Graph.php';
320 * $v1 = array(12,8,19,3,10,5);
321 * $v2 = array(1,28,9,13,1,5);
323 * $graph =& new MECON_Graph ("xy", 300, 300, 'PRUEBA');
325 * $b1plot = $graph->agregarSecuencia("barras", $v1);
326 * $b2plot = $graph->agregarSecuencia("barras", $v2);
328 * $graph->acumular(array($b1plot, $b2plot));
333 * @param array $secuencias Secuencias de barras a acumular
338 function acumular ($secuencias)
341 $colores = array_keys ($rgb->rgb_table);
343 // Esto pinta cada secuencia de un color diferente
344 for ($i=0; $i< count($secuencias); $i++)
345 $secuencias[$i]->SetFillColor ($colores[$i]);
347 $accplot = new AccBarPlot($secuencias);
348 $this->_grafico->Add($accplot);
352 * Genera el gráfico y lo dibuja.
359 $this->_grafico->Stroke();
363 * Convierte los valores numéricos de entrada en porcentajes
367 * require_once 'MECON/Graph.php';
369 * $valores = array (4, 6, 23, 14, 30);
370 * $nuevos = MECON_Graph::porcentajes($valores);
372 * // se obtiene (5, 8, 30, 18, 39) (%)
376 * @param array $valores Array de valores numéricos
382 function porcentajes ($valores)
384 require_once 'MECON/Graph/external/jpgraph/src/jpgraph_pie.php';
386 $plot = new PiePlot ($valores);
388 $porciento = $plot->AdjPercentage ($valores);