Ver Mensaje Individual
  #1 (permalink)  
Antiguo 30/12/2010, 06:43
russellhoff
 
Fecha de Ingreso: noviembre-2010
Ubicación: laudio
Mensajes: 61
Antigüedad: 14 años
Puntos: 1
Exclamación Ayuda con JpGraph

Hola amigos! De nuevo aquí... Estoy haciendo el pfc, donde estoy incluyendo un par de graficotes que los hago con JpGraph. Bien, he sido capaz de hacer una tarta en 3d y un grafico de barras simple. Ahora, estoy intentando hacer un grafico de barras compuesto de varias barras (en el eje de las Y los valores numericos, cantidades, y en el eje de las X'x los meses del año, por cada año una barra en cada mes). Es todo dinámico, saco los datos de una base de datos, los ordeno y los pongo como quiere jpgraph para hacer los Graph... Parece que todo marcha bien, pero me estoy volviendo loco debido a un problema:JpGraph Error: 25067 - Your manually specified scale and ticks is not correct. The scale seems to be too small to hold any of the specified tick marks.

Me he vuelto loco buscando en sitios, y me estoy retrasando en la planificación. Por ello acudo a vosotros....

Os esplico como va el codigo: antes de hacer nada con jpgraph os he comentado que ordeno los datos. Esos datos estarán dentro de un array y tienen este aspecto:

array (

[año] => array(

0 => cantidad
1 => cantidad
2 => cantidad
3 => cantidad
4 => cantidad
5 => cantidad
6 => cantidad
7 => cantidad
8 => cantidad
9 => cantidad
10 => cantidad
11 => cantidad

)

)

Vamos, un array que contiene años, siendo cada año otro array que contendrá los meses del año con sus respectivas cantidades (que poco interesa saber aquí..).

El código es el siguiente:

Código PHP:

<?php

    
include_once ('../../funciones/funciones_comunes.php');
    include_once(
'../../../jpgraph/jpgraph.php');
    include_once (
'../../../jpgraph/jpgraph_bar.php');
    
    
//Conseguimos las fechas
    /*$fecha_inicio = unixToMySQL($_SESSION["estadisticas_fecha_inicio_unix"]);
    unset($_SESSION["estadisticas_fecha_inicio_unix"]);
    $fecha_fin = unixToMySQL($_SESSION["estadisticas_fecha_fin_unix"]);
    unset($_SESSION["estadisticas_fecha_fin_unix"]);
    */
    
    ////////////////////////////////////////////////
    
$fecha_inicio time() - (550*24*60*60);
    
$fecha_fin $fecha_inicio + (550*24*60*60);
    
    
$fecha_inicio date("m-Y"$fecha_inicio);
    
$fecha_fin date("m-Y"$fecha_fin);
    
    
$fecha_inicio strtotime("01-".$fecha_inicio);
    
$fecha_fin strtotime("01-".$fecha_fin);
    
    
$fecha_inicio unixToMySQL($fecha_inicio);
    
$fecha_fin unixToMySQL($fecha_fin);
    
    
//echo $fecha_inicio . "<br />";
    //echo $fecha_fin . "<br />";
    /////////////////////////////////////////////////
    
    
$datos_de_bd obtenerNumeroInformesIncidenciasEntre2Fechas($fecha_inicio$fecha_fin);
    
    
$datos_ordenados_y_preparados = array();
    
    
$anio_inicio = (int) substr($fecha_inicio04);
    
$mes_inicio = (int) substr($fecha_inicio52);

    
$anio_fin = (int) substr($fecha_fin04);
    
$mes_fin = (int) substr($fecha_fin52);
    
    
//echo $anio_inicio . "-" . $mes_inicio . "............." . $anio_fin . "-" . $mes_fin . "<br />";
    
    
$salir_de_anio false;
    
    
$mes $mes_inicio;
    
$anio $anio_inicio;
    while ( !
$salir_de_anio ){
        
        
$salir_de_mes false;
        
$no_anadimos false;
        
        while( !
$salir_de_mes ){
            
            if( 
$mes >= 12 ){
                
$salir_de_mes true;
                if ( 
$mes 12 $no_anadimos=true;
            }else if( 
$anio == $anio_fin && $mes == $mes_fin ){
                
$salir_de_mes true;
            }
            
            if( !
$no_anadimos ){
                if( 
$mes 10 ){
                    
$id $anio."-0".$mes;
                }else{
                    
$id $anio."-".$mes;
                }
                
$datos_ordenados_y_preparados[$id] = array("date" => $id"ocurrencias" => 0);
        
                
$mes++;
            }
            
        }
        
        if( 
$anio == $anio_fin && $mes-== $mes_fin ){
            
$salir_de_anio true;
        }else{
            
$anio++;
            
$mes 1;
        }
    }
    
    
//print_r($datos_ordenados_y_preparados); echo "<br />";
    
    //Ya tenemos la base, ahora solo nos queda anadir las ocurrencias:
    
    //print_r($datos_de_bd);
    
    
foreach ( $datos_de_bd as $dato ){
        
$datos_ordenados_y_preparados[$dato["date"]]["ocurrencias"]++;
    }
    
    
//print_r($datos_ordenados_y_preparados); echo "<br />";
    
    //Preparamos el array de los datos y recreamos el array con las etiquetas del graficote:::
    
$variables = array(); //contendra las variables creadas

    
foreach ( $datos_ordenados_y_preparados as $parte ){
        
$anio_parte substr($parte["date"], 04); //echo "$anio_parte <br />";
        
$mes_parte substr($parte["date"], 52); //echo "$mes_parte <br />";
        
$array_datos_anio "datos" $anio_parte//echo "$array_datos_anio <br />";
        
if( !isset($$array_datos_anio) ){
            $
$array_datos_anio = array("0" => 0"1" => 0"2" => 0"3" => 0"4" => 0"5" => 0"6" => 0"7" => 0"8" => 0"9" => 0"10" => 0"11" =>0);
            
$variables[$anio_parte] = $$array_datos_anio;
        }
        
$variables[$anio_parte][$mes_parte-1] = $parte["ocurrencias"];
    }
    
    
//print_r($variables); echo "<br />";
    





    /*
•    De aqui en adelante, todo lo que tiene que ver con el jpGraph.
•    * since now, everything connected to jpgraph.
     */
    
    // Creamos el grafico.
    
$graph = new Graph(700,300,'auto');
    
$graph->SetScale("textlin");
    
$graph->SetY2Scale("lin",0,90);
    
$graph->SetY2OrderBack(false);
    
$graph->SetShadow();
    
$graph->img->SetMargin(40,30,20,40);
    
    
//El tema (estilo del grafico, conjunto de colores...):
    
$tema = new UniversalTheme();
    
$graph->SetTheme($tema); //lo anadimos
    
    
$graph->yaxis->SetTickPositions(array(0,5,15,25), array(10,20,30));
    
$graph->y2axis->SetTickPositions(array(10,20,30));
    
    
//Preparamos las etiquetas para los meses
    
$meses $gDateLocale->GetShortMonth();
    
$graph->SetBox(false);
    
    
$graph->ygrid->SetFill(false);
    
$graph->yaxis->HideLine(false);
    
$graph->yaxis->HideTicks(false,false);
    
$graph->yaxis->scale->SetGrace(20);
    
//Asignamos los meses como etiquetas del eje de las X
    
$graph->xaxis->SetTickLabels($meses);
    
    
//Depende de cuantos anios tengamos, crearemos mas barras o no:
    
$array_colores = array(
                            
=> "#8A0808",
                            
=> "#DF7401",
                            
=> "#AEB404",
                            
=> "#74DF00",
                            
=> "#01DF74",
                            
=> "#088A85",
                            
=> "#0080FF",
                            
=> "#0101DF",
                            
=> "#9A2EFE",
                            
=> "#585858"
                        );
    
    
$cont 0;
    
$graficos = array();
    for (
$i $anio_inicio$i <= $anio_fin$i++){
        
$nombre "plot" $i;
        $
$nombre = new BarPlot($variables[$i]);
        
//para que se muestre el valor en las barras
        
$$nombre->value->Show();
        $
$nombre->value->SetFormat("%d"); //valores enteros
        
$$nombre->value->SetFont(FF_FONT1,FS_BOLD); //fuente
        
$$nombre->SetValuePos('center'); //que se muestre en el medio
        
$$nombre->SetColor($array_colores[$cont]);
        $
$nombre->SetFillColor($array_colores[$cont]);
        $
$nombre->SetLegend($i);
        
$graficos[] = $$nombre;

        
$cont++;
    }
    
//print_r($graficos);
    
    //Creamos el diagrama agrupado:
    
$gbplot = new GroupBarPlot($graficos);
    
    
//lo anadimos el grafico
    
$graph->Add($gbplot);
    
    
//Anadims titulo al graficote
    
$graph->title->Set("Graficote");
    
    
//Mostramos el grafico
    
$graph->Stroke();

?>