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_inicio, 0, 4);
$mes_inicio = (int) substr($fecha_inicio, 5, 2);
$anio_fin = (int) substr($fecha_fin, 0, 4);
$mes_fin = (int) substr($fecha_fin, 5, 2);
//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-1 == $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"], 0, 4); //echo "$anio_parte <br />";
$mes_parte = substr($parte["date"], 5, 2); //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(
0 => "#8A0808",
1 => "#DF7401",
2 => "#AEB404",
3 => "#74DF00",
4 => "#01DF74",
5 => "#088A85",
6 => "#0080FF",
7 => "#0101DF",
8 => "#9A2EFE",
9 => "#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();
?>