------------------------------------------------------------------------------- $Id: Graph.php 428 2003-11-18 14:30:30Z mmarre $ -----------------------------------------------------------------------------*/ require_once 'MECON/Graph/external/jpgraph/src/jpgraph.php'; /** * Liberia base para el manejo de graficos. */ class MECON_Graph { /** * Tipo del grafico (xy, torta, gantt) * @var int $ancho * @access private */ var $_tipo; /** * Ancho del grafico. * @var int $ancho * @access private */ var $_ancho; /** * Alto del grafico. * @var int $alto * @access private */ var $_alto; /** * El grafico propiamente dicho. * @var Graph $grafico * @access private */ var $_grafico; /** * Booleano que define si se muestran o no los valores * @var bool $verValores * @access private */ var $_verValores; /** * Class constructor. * * @param string $tipo Tipo de grafico(xy,torta,torta3D,gantt) * @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. * * @return void * @access public */ function MECON_graph($tipo, $ancho=300, $alto=200,$titulo,$attrib_gral=NULL) { $this->_tipo=$tipo; $this->_ancho= $ancho; $this->_alto= $alto; if (isset($attrib_gral['verValores'])) $this->_verValores= $attrib_gral['verValores']; if($this->_tipo=="xy") { $this->_grafico= new Graph($ancho,$alto,"auto"); $this->_grafico->SetScale("textlin"); if (isset($attrib_gral['Xtitulo'])) $this->_grafico->xaxis->title->Set($attrib_gral['Xtitulo']); if (isset($attrib_gral['Ytitulo'])) $this->_grafico->yaxis->title->Set($attrib_gral['Ytitulo']); if (isset($attrib_gral['XEtiquetas'])) $this->_grafico->xaxis->SetTickLabels($attrib_gral['XEtiquetas']); } if(($this->_tipo=="torta")||($this->_tipo=="torta3D")) { require_once 'MECON/Graph/external/jpgraph/src/jpgraph_pie.php'; require_once 'MECON/Graph/external/jpgraph/src/jpgraph_pie3d.php'; $this->_grafico= new PieGraph($ancho,$alto); } //Atributos en comun if (isset($titulo)) $this->_grafico->title-> Set($titulo); if (isset($attrib_gral['subTitulo'])) $this->_grafico->subtitle->Set($attrib_gral['subTitulo']); if (isset($attrib_gral['verSombra']) and $attrib_gral['verSombra']==true) $this->_grafico->SetShadow(); } /** * Agrega Secuencia de datos. * * @param array $tipo Tipo de grafico para la secuencia * @param array $secuencia Datos del arreglo * @param array $atributos Atributos especiales para la secuencia * * 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) { if($this->_tipo=="xy") { $valido=false; if ($tipo=="lineas") { $valido=true; 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") { $valido=true; 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; require_once 'MECON/Graph/external/jpgraph/src/jpgraph_scatter.php'; $plot= new ScatterPlot($secuencia); if (isset($atributos['tipoMarca'])) $plot->mark->SetType($atributos['tipoMarca']); if (isset($atributos['impulso'])) { if ($atributos['impulso']=="si") $plot->SetImpuls(); } } //Si hubo error if ($valido==true) { // 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']); 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)"); } }//del if tipo xy if(($this->_tipo=="torta")||($this->_tipo=="torta3D")) { if($this->_tipo=="torta") $plot= new PiePlot($secuencia); 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'])) { $x=$atributos['centro'][0]; $y=$atributos['centro'][1]; $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. * * @return void * @access public */ function generar() { $this->_grafico->Stroke(); } }