1 <?php /* vim: set binary expandtab tabstop=4 shiftwidth=4 textwidth=80:
2 -------------------------------------------------------------------------------
4 -------------------------------------------------------------------------------
5 This file is part of mlib.
7 mlib is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 2 of the License, or (at your option)
12 mlib is distributed in the hope that it will be useful, but WITHOUT
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
14 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License; if not,
17 write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
18 Boston, MA 02111-1307 USA
19 -------------------------------------------------------------------------------
20 Creado: Tue Nov 26 12:45:31 2003
21 Autor: Manuel Nazar Anchorena <manazar@mecon.gov.ar>
22 -------------------------------------------------------------------------------
23 $Id: Graph.php 428 2003-11-18 14:30:30Z mmarre $
24 -----------------------------------------------------------------------------*/
26 require_once 'MLIB/Graph/external/jpgraph/src/jpgraph.php';
29 * Liberia base para el manejo de graficos.
35 * Tipo del grafico (xy, torta, gantt)
57 * El grafico propiamente dicho.
64 * Booleano que define si se muestran o no los valores
65 * @var bool $verValores
73 * @param string $tipo Tipo de grafico(xy,torta,torta3D,gantt)
74 * @param int $ancho Ancho del grafico
75 * @param int $alto Alto del grafico
76 * @param string $titulo Titulo del grafico.
77 * @param array $attrib_gral Contiene opciones generales para el gráfico.
79 * Opciones generales para gráficos XY:
80 * - XTitulo (Título del Eje X)
81 * - YTitulo (Título del Eje Y)
82 * - XEtiquetas (Array de Referencias del eje X)
83 * - XEtiquetasRotar (Rota las etiquetas del eje X en 90 grados)
84 * - margenes (array asociativo con alguna/s de las siguientes claves:
85 * - L (margen izquierdo)
86 * - R (margen derecho)
87 * - T (margen superior)
88 * - B (margen inferior))
93 function MLIB_graph($tipo, $ancho=300, $alto=200,$titulo,$attrib_gral=NULL)
96 $this->_ancho= $ancho;
99 if (isset($attrib_gral['verValores']))
100 $this->_verValores= $attrib_gral['verValores'];
102 if($this->_tipo=="xy")
104 $this->_grafico= new Graph($ancho,$alto,"auto");
105 $this->_grafico->SetScale("textlin");
107 if (isset($attrib_gral['Xtitulo']))
108 $this->_grafico->xaxis->title->Set($attrib_gral['Xtitulo']);
110 if (isset($attrib_gral['Ytitulo']))
111 $this->_grafico->yaxis->title->Set($attrib_gral['Ytitulo']);
113 if (isset($attrib_gral['XEtiquetas']))
114 $this->_grafico->xaxis->SetTickLabels($attrib_gral['XEtiquetas']);
116 if (isset($attrib_gral['XEtiquetasRotar']))
117 $this->_grafico->xaxis->label_angle = 90;
120 if(($this->_tipo=="torta")||($this->_tipo=="torta3D"))
122 require_once 'MLIB/Graph/external/jpgraph/src/jpgraph_pie.php';
123 require_once 'MLIB/Graph/external/jpgraph/src/jpgraph_pie3d.php';
125 $this->_grafico= new PieGraph($ancho,$alto);
132 $this->_grafico->title-> Set($titulo);
133 if (isset($attrib_gral['subTitulo']))
134 $this->_grafico->subtitle->Set($attrib_gral['subTitulo']);
135 if (isset($attrib_gral['verSombra']) and $attrib_gral['verSombra']==true)
136 $this->_grafico->SetShadow();
138 if (isset($attrib_gral['margenes'])){
139 if (isset($attrib_gral['margenes']['L']))
140 $this->_grafico->img->left_margin = $attrib_gral['margenes']['L'];
142 if (isset($attrib_gral['margenes']['R']))
143 $this->_grafico->img->right_margin = $attrib_gral['margenes']['R'];
145 if (isset($attrib_gral['margenes']['T']))
146 $this->_grafico->img->top_margin = $attrib_gral['margenes']['T'];
148 if (isset($attrib_gral['margenes']['B']))
149 $this->_grafico->img->bottom_margin = $attrib_gral['margenes']['B'];
156 * Agrega Secuencia de datos.
158 * @param array $tipo Tipo de grafico para la secuencia
159 * @param array $secuencia Datos del arreglo
160 * @param array $atributos Atributos especiales para la secuencia
162 * Tipos de secuencias para gráficos xy:
169 * - colorRelleno (solamente barras y puntos)
171 * - impulso ("si") (solamente para puntos)
172 * - tipoMarca (de 1 a 17) (solamente para puntos)
173 * - etiquetas (array) (para gráficos de torta muestra las etiquetas
174 * en lugar de los porcentajes)
175 * - tema ("earth", "pastel", "water", "sand")
176 * (para gráficos de torta, permite cambiar el esquema de colores)
177 * (es "earth" por default)
178 * - explotar (para torta y torta3D) (valor que indica la separación de
179 * de las porciones de la torta)
180 * - posLeyenda (array con dos coordenadas para la posición de la leyenda)
181 * - formatoValores (string con el formato que se quiere dar a los valores
183 * - noAgregar (Si está seteado indica que la secuencia se genera pero no
184 * se agrega al gráfico. Se utiliza para gráficos de barras
185 * acumulativos, donde las secuencias deben agregarse todas
191 function agregarSecuencia($tipo,$secuencia,$atributos=NULL)
193 if($this->_tipo=="xy")
200 require_once 'MLIB/Graph/external/jpgraph/src/jpgraph_line.php';
201 $plot= new LinePlot($secuencia);
203 if (isset($atributos['colorRelleno']))
204 $plot->SetFillColor($atributos['colorRelleno']);
211 require_once 'MLIB/Graph/external/jpgraph/src/jpgraph_bar.php';
212 $plot= new BarPlot($secuencia);
214 if (isset($atributos['colorRelleno']))
215 $plot->SetFillColor($atributos['colorRelleno']);
222 require_once 'MLIB/Graph/external/jpgraph/src/jpgraph_scatter.php';
223 $plot= new ScatterPlot($secuencia);
225 if (isset($atributos['tipoMarca']))
226 $plot->mark->SetType($atributos['tipoMarca']);
228 if (isset($atributos['impulso']))
230 if ($atributos['impulso']=="si")
239 // Seteo opciones generales
240 if (isset($atributos['formatoValores']))
241 $plot->value->format = $atributos['formatoValores'];
243 if ($this->_verValores)
244 $plot->value->Show();
246 if (isset($atributos['color']))
247 $plot->SetColor($atributos['color']);
249 if (isset($atributos['leyenda']))
251 $plot->SetLegend($atributos['leyenda']);
252 //$this->_grafico->legend->SetLayout(LEGEND_HOR);
253 $this->_grafico->legend->Pos(0.02,0.01);
258 trigger_error ("Error: Tipo de grafico $tipo no valido (aun)", E_USER_ERROR);
263 if(($this->_tipo=="torta")||($this->_tipo=="torta3D"))
265 if($this->_tipo=="torta")
266 $plot= new PiePlot($secuencia);
268 if($this->_tipo=="torta3D")
269 $plot= new PiePlot3D($secuencia);
271 // Esto lo agrego porque si no, no redondea a 100%
272 $plot->labeltype = 2;
274 if ($this->_verValores)
275 $plot->value->Show();
277 if (isset($atributos['leyendas']))
278 $plot->SetLegends($atributos['leyendas']);
280 if (isset($atributos['tema']))
281 $plot->SetTheme($atributos['tema']);
283 if (isset($atributos['etiquetas']))
284 $plot->SetLabels($atributos['etiquetas']);
286 if (isset($atributos['centro']))
288 $x=$atributos['centro'][0];
289 $y=$atributos['centro'][1];
290 $plot->SetCenter($x,$y);
293 if (isset($atributos['explotar']))
294 $plot->ExplodeAll($atributos['explotar']);
299 if (isset($atributos['posLeyenda']))
301 $this->_grafico->legend->xpos = $atributos['posLeyenda'][0];
302 $this->_grafico->legend->ypos = $atributos['posLeyenda'][1];
305 if (!isset($atributos['noAgregar']))
306 $this->_grafico->Add($plot);
313 * Acumula las secuencias para generar un gráfico acumulativo de barras
317 * require_once 'MLIB/Graph.php';
319 * $v1 = array(12,8,19,3,10,5);
320 * $v2 = array(1,28,9,13,1,5);
322 * $graph =& new MLIB_Graph ("xy", 300, 300, 'PRUEBA');
324 * $b1plot = $graph->agregarSecuencia("barras", $v1);
325 * $b2plot = $graph->agregarSecuencia("barras", $v2);
327 * $graph->acumular(array($b1plot, $b2plot));
332 * @param array $secuencias Secuencias de barras a acumular
337 function acumular ($secuencias)
340 $colores = array_keys ($rgb->rgb_table);
342 // Esto pinta cada secuencia de un color diferente
343 for ($i=0; $i< count($secuencias); $i++)
344 $secuencias[$i]->SetFillColor ($colores[$i]);
346 $accplot = new AccBarPlot($secuencias);
347 $this->_grafico->Add($accplot);
351 * Genera el gráfico y lo dibuja.
358 $this->_grafico->Stroke();
362 * Convierte los valores numéricos de entrada en porcentajes
366 * require_once 'MLIB/Graph.php';
368 * $valores = array (4, 6, 23, 14, 30);
369 * $nuevos = MLIB_Graph::porcentajes($valores);
371 * // se obtiene (5, 8, 30, 18, 39) (%)
375 * @param array $valores Array de valores numéricos
381 function porcentajes ($valores)
383 require_once 'MLIB/Graph/external/jpgraph/src/jpgraph_pie.php';
385 $plot = new PiePlot ($valores);
387 $porciento = $plot->AdjPercentage ($valores);