]> git.llucax.com Git - mecon/meconlib.git/blobdiff - lib/MECON/Graph.php
BugFix.
[mecon/meconlib.git] / lib / MECON / Graph.php
index e1817fa1f9e04b6eaefa94b3c43f75550ea00632..8d8c5798f85caf302df7cff111ef5f2a4b50aaea 100644 (file)
@@ -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 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
      *
      * @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['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"))
         }
 
         if(($this->_tipo=="torta")||($this->_tipo=="torta3D"))
@@ -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();
             $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,23 @@ class MECON_Graph {
      *
      * Atributos:
      * - color
      *
      * 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)
      * - explotar (para torta y torta3D) (valor que indica la separación de
      * - 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) 
+     *                     de las porciones de la torta) 
      * - posLeyenda (array con dos coordenadas para la posición de la leyenda)
      * - 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)
      * @access public
      */
     function agregarSecuencia($tipo,$secuencia,$atributos=NULL)
@@ -165,19 +198,10 @@ class MECON_Graph {
                 require_once 'MECON/Graph/external/jpgraph/src/jpgraph_line.php';
                 $plot= new LinePlot($secuencia);
 
                 require_once 'MECON/Graph/external/jpgraph/src/jpgraph_line.php';
                 $plot= new LinePlot($secuencia);
 
-               if (isset($atributos['formatoValores']))
-                   $plot->value->format = $atributos['formatoValores'];
-
-                if ($this->_verValores)
-                    $plot->value->Show();
-
                 if (isset($atributos['colorRelleno']))
                 if (isset($atributos['colorRelleno']))
-                {
                     $plot->SetFillColor($atributos['colorRelleno']);
                     $plot->SetFillColor($atributos['colorRelleno']);
-                }
             }
             }
-        
+           
         
             if ($tipo=="barras")
             {
         
             if ($tipo=="barras")
             {
@@ -185,38 +209,19 @@ class MECON_Graph {
                 require_once 'MECON/Graph/external/jpgraph/src/jpgraph_bar.php';
                 $plot= new BarPlot($secuencia);
 
                 require_once 'MECON/Graph/external/jpgraph/src/jpgraph_bar.php';
                 $plot= new BarPlot($secuencia);
 
-               if (isset($atributos['formatoValores']))
-                   $plot->value->format = $atributos['formatoValores'];
-
-                if ($this->_verValores)
-                    $plot->value->Show();
-
                 if (isset($atributos['colorRelleno']))
                 if (isset($atributos['colorRelleno']))
-                {
                     $plot->SetFillColor($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 ($tipo=="puntos")
             {
                 $valido=true;
                 require_once 'MECON/Graph/external/jpgraph/src/jpgraph_scatter.php';
                 $plot= new ScatterPlot($secuencia);
 
-               if (isset($atributos['formatoValores']))
-                   $plot->value->format = $atributos['formatoValores'];
-
-                if ($this->_verValores)
-                    $plot->value->Show();
-
-                if (isset($atributos['colorRelleno'])){
-                   $plot->mark->SetFillColor($atributos['colorRelleno']);
-               }    
-            
-                if (isset($atributos['tipoMarca'])){
-                   $plot->mark->SetType($atributos['tipoMarca']);
-               }    
+                if (isset($atributos['tipoMarca']))
+                           $plot->mark->SetType($atributos['tipoMarca']);
             
                 if (isset($atributos['impulso']))
                 {
             
                 if (isset($atributos['impulso']))
                 {
@@ -224,24 +229,31 @@ class MECON_Graph {
                         $plot->SetImpuls();
                 }
             }
                         $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.02,0.01);
-            }
+        
+                // 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)");
+                trigger_error ("Error: Tipo de grafico $tipo no valido (aun)", E_USER_ERROR);
             }
         }//del if tipo xy
 
             }
         }//del if tipo xy
 
@@ -254,22 +266,17 @@ class MECON_Graph {
             if($this->_tipo=="torta3D")
                 $plot= new PiePlot3D($secuencia);
 
             if($this->_tipo=="torta3D")
                 $plot= new PiePlot3D($secuencia);
 
-           // Esto lo agrego porque si no, no redondea a 100%
-           $plot->labeltype = 2;
+               // Esto lo agrego porque si no, no redondea a 100%
+               $plot->labeltype = 2;
 
             if ($this->_verValores)
                 $plot->value->Show();
         
             if (isset($atributos['leyendas']))
 
             if ($this->_verValores)
                 $plot->value->Show();
         
             if (isset($atributos['leyendas']))
-            {
                 $plot->SetLegends($atributos['leyendas']);
                 $plot->SetLegends($atributos['leyendas']);
-            }
 
             if (isset($atributos['etiquetas']))
 
             if (isset($atributos['etiquetas']))
-            {
                 $plot->SetLabels($atributos['etiquetas']);
                 $plot->SetLabels($atributos['etiquetas']);
-            }
-
 
             if (isset($atributos['centro']))
             {
 
             if (isset($atributos['centro']))
             {
@@ -278,22 +285,65 @@ class MECON_Graph {
                 $plot->SetCenter($x,$y);
             }
 
                 $plot->SetCenter($x,$y);
             }
 
-           if (isset($atributos['explotar'])){
-               $plot->ExplodeAll($atributos['explotar']);
-           }
+           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['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;    
+    
     }
     }
-   
+  
     /**
     /**
-     * Genera el grafico y lo dibuja.
+     * 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 gráfico y lo dibuja.
      *
      * @return void
      * @access public
      *
      * @return void
      * @access public
@@ -303,5 +353,34 @@ class MECON_Graph {
         $this->_grafico->Stroke();
     }
 
         $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;
+     }
 }
 }