* @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
*/
function MECON_graph($tipo, $ancho=300, $alto=200,$titulo,$attrib_gral=NULL)
- {
+ {
$this->_tipo=$tipo;
$this->_ancho= $ancho;
$this->_alto= $alto;
{
$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']);
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"))
$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();
- }
- }
+
+ 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'];
+ }
+
+ }
/**
* @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))
+ * - 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 plot
* @access public
*/
function agregarSecuencia($tipo,$secuencia,$atributos=NULL)
$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']))
{
$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)");
+ trigger_error ("Error: Tipo de grafico $tipo no valido (aun)", E_USER_ERROR);
}
}//del if tipo xy
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']))
{
$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];
+ }
+ 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
$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;
+ }
}