X-Git-Url: https://git.llucax.com/mecon/meconlib.git/blobdiff_plain/9926f1886cad61ddd622978a55d2c7909460e733..c0cc0ddabd54d39b68079ef97f414b799211aa67:/lib/MECON/Graph.php?ds=sidebyside diff --git a/lib/MECON/Graph.php b/lib/MECON/Graph.php index f1957fa..fa8d412 100644 --- a/lib/MECON/Graph.php +++ b/lib/MECON/Graph.php @@ -75,7 +75,18 @@ class MECON_Graph { * @param int $ancho Ancho del grafico * @param int $alto Alto del grafico * @param string $titulo Titulo del grafico. - * @param array $attrib_gral Contiene opciones generales para el grafico. + * @param array $attrib_gral Contiene opciones generales para el gráfico. + * + * Opciones generales para gráficos XY: + * - XTitulo (Título del Eje X) + * - YTitulo (Título del Eje Y) + * - XEtiquetas (Array de Referencias del eje X) + * - XEtiquetasRotar (Rota las etiquetas del eje X en 90 grados) + * - margenes (array asociativo con alguna/s de las siguientes claves: + * - L (margen izquierdo) + * - R (margen derecho) + * - T (margen superior) + * - B (margen inferior)) * * @return void * @access public @@ -102,6 +113,9 @@ class MECON_Graph { if (isset($attrib_gral['XEtiquetas'])) $this->_grafico->xaxis->SetTickLabels($attrib_gral['XEtiquetas']); + + if (isset($attrib_gral['XEtiquetasRotar'])) + $this->_grafico->xaxis->label_angle = 90; } if(($this->_tipo=="torta")||($this->_tipo=="torta3D")) @@ -110,7 +124,7 @@ class MECON_Graph { require_once 'MECON/Graph/external/jpgraph/src/jpgraph_pie3d.php'; $this->_grafico= new PieGraph($ancho,$alto); - + } //Atributos en comun @@ -121,8 +135,22 @@ class MECON_Graph { $this->_grafico->subtitle->Set($attrib_gral['subTitulo']); if (isset($attrib_gral['verSombra']) and $attrib_gral['verSombra']==true) $this->_grafico->SetShadow(); - - } + + if (isset($attrib_gral['margenes'])){ + if (isset($attrib_gral['margenes']['L'])) + $this->_grafico->img->left_margin = $attrib_gral['margenes']['L']; + + if (isset($attrib_gral['margenes']['R'])) + $this->_grafico->img->right_margin = $attrib_gral['margenes']['R']; + + if (isset($attrib_gral['margenes']['T'])) + $this->_grafico->img->top_margin = $attrib_gral['margenes']['T']; + + if (isset($attrib_gral['margenes']['B'])) + $this->_grafico->img->bottom_margin = $attrib_gral['margenes']['B']; + } + + } /** @@ -139,18 +167,26 @@ class MECON_Graph { * * Atributos: * - color - * - colorRelleno + * - colorRelleno (solamente barras y puntos) * - leyenda * - impulso ("si") (solamente para puntos) * - tipoMarca (de 1 a 17) (solamente para puntos) * - etiquetas (array) (para gráficos de torta muestra las etiquetas * en lugar de los porcentajes) + * - tema ("earth", "pastel", "water", "sand") + * (para gráficos de torta, permite cambiar el esquema de colores) + * (es "earth" por default) * - explotar (para torta y torta3D) (valor que indica la separación de - * de las porciones de la torta) + * de las porciones de la torta) * - posLeyenda (array con dos coordenadas para la posición de la leyenda) - * - formatoValores (string con el formato que se quiere dar a los valores (sprintf)) + * - formatoValores (string con el formato que se quiere dar a los valores + * (sprintf)) + * - noAgregar (Si está seteado indica que la secuencia se genera pero no + * se agrega al gráfico. Se utiliza para gráficos de barras + * acumulativos, donde las secuencias deben agregarse todas + * juntas al final) * - * @return void + * @return plot * @access public */ function agregarSecuencia($tipo,$secuencia,$atributos=NULL) @@ -165,8 +201,10 @@ class MECON_Graph { require_once 'MECON/Graph/external/jpgraph/src/jpgraph_line.php'; $plot= new LinePlot($secuencia); + if (isset($atributos['colorRelleno'])) + $plot->SetFillColor($atributos['colorRelleno']); } - + if ($tipo=="barras") { @@ -174,8 +212,11 @@ class MECON_Graph { require_once 'MECON/Graph/external/jpgraph/src/jpgraph_bar.php'; $plot= new BarPlot($secuencia); + if (isset($atributos['colorRelleno'])) + $plot->SetFillColor($atributos['colorRelleno']); } - + + if ($tipo=="puntos") { $valido=true; @@ -203,11 +244,9 @@ class MECON_Graph { if ($this->_verValores) $plot->value->Show(); - if (isset($atributos['colorRelleno'])) - $plot->SetFillColor($atributos['colorRelleno']); - if (isset($atributos['color'])) $plot->SetColor($atributos['color']); + if (isset($atributos['leyenda'])) { $plot->SetLegend($atributos['leyenda']); @@ -217,7 +256,7 @@ class MECON_Graph { }else { - die ("Error: Tipo de grafico $tipo no valido (aun)"); + trigger_error ("Error: Tipo de grafico $tipo no valido (aun)", E_USER_ERROR); } }//del if tipo xy @@ -237,15 +276,13 @@ class MECON_Graph { $plot->value->Show(); if (isset($atributos['leyendas'])) - { $plot->SetLegends($atributos['leyendas']); - } + + if (isset($atributos['tema'])) + $plot->SetTheme($atributos['tema']); if (isset($atributos['etiquetas'])) - { $plot->SetLabels($atributos['etiquetas']); - } - if (isset($atributos['centro'])) { @@ -255,23 +292,64 @@ class MECON_Graph { } if (isset($atributos['explotar'])) - { $plot->ExplodeAll($atributos['explotar']); - } }// del if torta - - $this->_grafico->Add($plot); + if (isset($atributos['posLeyenda'])) { $this->_grafico->legend->xpos = $atributos['posLeyenda'][0]; $this->_grafico->legend->ypos = $atributos['posLeyenda'][1]; } + + if (!isset($atributos['noAgregar'])) + $this->_grafico->Add($plot); + + return $plot; + } - + + /** + * Acumula las secuencias para generar un gráfico acumulativo de barras + * + * Ejemplo de Uso: + * @code + * require_once 'MECON/Graph.php'; + * + * $v1 = array(12,8,19,3,10,5); + * $v2 = array(1,28,9,13,1,5); + * + * $graph =& new MECON_Graph ("xy", 300, 300, 'PRUEBA'); + * + * $b1plot = $graph->agregarSecuencia("barras", $v1); + * $b2plot = $graph->agregarSecuencia("barras", $v2); + * + * $graph->acumular(array($b1plot, $b2plot)); + * $graph->generar(); + * + * @endcode + * + * @param array $secuencias Secuencias de barras a acumular + * + * @return void + * @access public + */ + function acumular ($secuencias) + { + $rgb = new RGB(); + $colores = array_keys ($rgb->rgb_table); + + // Esto pinta cada secuencia de un color diferente + for ($i=0; $i< count($secuencias); $i++) + $secuencias[$i]->SetFillColor ($colores[$i]); + + $accplot = new AccBarPlot($secuencias); + $this->_grafico->Add($accplot); + } + /** - * Genera el grafico y lo dibuja. + * Genera el gráfico y lo dibuja. * * @return void * @access public @@ -281,5 +359,34 @@ class MECON_Graph { $this->_grafico->Stroke(); } + /** + * Convierte los valores numéricos de entrada en porcentajes + * + * Ejemplo de uso: + * @code + * require_once 'MECON/Graph.php'; + * + * $valores = array (4, 6, 23, 14, 30); + * $nuevos = MECON_Graph::porcentajes($valores); + * + * // se obtiene (5, 8, 30, 18, 39) (%) + * + * @endcode + * + * @param array $valores Array de valores numéricos + * + * @return array + * @access public + * @static + */ + function porcentajes ($valores) + { + require_once 'MECON/Graph/external/jpgraph/src/jpgraph_pie.php'; + $plot = new PiePlot ($valores); + + $porciento = $plot->AdjPercentage ($valores); + + return $porciento; + } }