X-Git-Url: https://git.llucax.com/mecon/meconlib.git/blobdiff_plain/e78837ddf2655c11a5bc4765eb5b85fc66473d7c..ddf9371f47fb8d28d54c1429f7c6560b561b6069:/lib/MECON/Graph.php diff --git a/lib/MECON/Graph.php b/lib/MECON/Graph.php index 088a425..64627e7 100644 --- a/lib/MECON/Graph.php +++ b/lib/MECON/Graph.php @@ -81,7 +81,7 @@ class MECON_Graph { * @access public */ function MECON_graph($tipo, $ancho=300, $alto=200,$titulo,$attrib_gral=NULL) - { + { $this->_tipo=$tipo; $this->_ancho= $ancho; $this->_alto= $alto; @@ -93,10 +93,10 @@ class MECON_Graph { { $this->_grafico= new Graph($ancho,$alto,"auto"); $this->_grafico->SetScale("textlin"); - + if (isset($attrib_gral['Xtitulo'])) - $this->_grafico->xaxis->title->Set($attrib_gral['Xtitulo']); - + $this->_grafico->xaxis->title->Set($attrib_gral['Xtitulo']); + if (isset($attrib_gral['Ytitulo'])) $this->_grafico->yaxis->title->Set($attrib_gral['Ytitulo']); @@ -119,10 +119,9 @@ class MECON_Graph { $this->_grafico->title-> Set($titulo); if (isset($attrib_gral['subTitulo'])) $this->_grafico->subtitle->Set($attrib_gral['subTitulo']); - if ($attrib_gral['verSombra']==true) - { + if (isset($attrib_gral['verSombra']) and $attrib_gral['verSombra']==true) $this->_grafico->SetShadow(); - } + } @@ -133,7 +132,25 @@ class MECON_Graph { * @param array $secuencia Datos del arreglo * @param array $atributos Atributos especiales para la secuencia * - * @return void + * Tipos de secuencias para gráficos xy: + * - lineas + * - barras + * - puntos + * + * Atributos: + * - color + * - 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) + * - explotar (para torta y torta3D) (valor que indica la separación de + * 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)) + * + * @return plot * @access public */ function agregarSecuencia($tipo,$secuencia,$atributos=NULL) @@ -147,34 +164,31 @@ class MECON_Graph { $valido=true; require_once 'MECON/Graph/external/jpgraph/src/jpgraph_line.php'; $plot= new LinePlot($secuencia); - if ($this->_verValores) - $plot->value->Show(); if (isset($atributos['colorRelleno'])) - { $plot->SetFillColor($atributos['colorRelleno']); - } - } - + if ($tipo=="barras") { $valido=true; require_once 'MECON/Graph/external/jpgraph/src/jpgraph_bar.php'; $plot= new BarPlot($secuencia); - if ($this->_verValores) - $plot->value->Show(); + if (isset($atributos['colorRelleno'])) + $plot->SetFillColor($atributos['colorRelleno']); } - + + if ($tipo=="puntos") { $valido=true; require_once 'MECON/Graph/external/jpgraph/src/jpgraph_scatter.php'; $plot= new ScatterPlot($secuencia); - if ($this->_verValores) - $plot->value->Show(); + + if (isset($atributos['tipoMarca'])) + $plot->mark->SetType($atributos['tipoMarca']); if (isset($atributos['impulso'])) { @@ -182,22 +196,29 @@ class MECON_Graph { $plot->SetImpuls(); } } - - // Seteo opciones generales - if (isset($atributos['color'])) - { - $plot->SetColor($atributos['color']); - } - if (isset($atributos['leyenda'])) + + //Si hubo error + if ($valido==true) { - $plot->SetLegend($atributos['leyenda']); - //$this->_grafico->legend->SetLayout(LEGEND_HOR); - //$this->_grafico->legend->Pos(0.05,0.5,"bottom","center"); - } + + // Seteo opciones generales + if (isset($atributos['formatoValores'])) + $plot->value->format = $atributos['formatoValores']; + if ($this->_verValores) + $plot->value->Show(); + + if (isset($atributos['color'])) + $plot->SetColor($atributos['color']); - //Si hubo error - if ($valido==false) + if (isset($atributos['leyenda'])) + { + $plot->SetLegend($atributos['leyenda']); + //$this->_grafico->legend->SetLayout(LEGEND_HOR); + $this->_grafico->legend->Pos(0.02,0.01); + } + + }else { die ("Error: Tipo de grafico $tipo no valido (aun)"); } @@ -211,15 +232,18 @@ class MECON_Graph { if($this->_tipo=="torta3D") $plot= new PiePlot3D($secuencia); - + + // Esto lo agrego porque si no, no redondea a 100% + $plot->labeltype = 2; + if ($this->_verValores) $plot->value->Show(); - if (isset($atributos['leyendas'])) - { $plot->SetLegends($atributos['leyendas']); - } + + if (isset($atributos['etiquetas'])) + $plot->SetLabels($atributos['etiquetas']); if (isset($atributos['centro'])) { @@ -228,16 +252,59 @@ class MECON_Graph { $plot->SetCenter($x,$y); } - } + 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]; + } - + 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'); + * + * $attribs1 = array('colorRelleno'=>'green'); + * $attribs2 = array('colorRelleno'=>'orange'); + * + * $b1plot = $graph->agregarSecuencia("barras", $v1, $attribs1); + * $b2plot = $graph->agregarSecuencia("barras", $v2, $attribs2); + * + * $graph->acumular(array($b1plot, $b2plot)); + * $graph->generar(); + * + * @endcode + * + * @param array $secuencias Secuencias de barras a acumular + * + * @return void + * @access public + */ + function acumular ($secuencias) + { + $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 @@ -247,5 +314,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; + } }