Grafico formato sulle spese di un ipotetico consumo familiare per gli anni 2011-3013 per le voci: acqua, elettricità, gas, alimentari.
Per ogni anno verranno disegnate 4 barre 3d di diverso colore proporzionali a ciascuna spesa. In anni diversi alla stessa tipologia di spesa corrisponde sempre lo stesso colore.
Sotto la base delle colonne, la legenda per anni e tipo consumo, mentre il valore è alla sommità di ciascuna barra.
Tab es. 101 ANNO Acqua Elettricità Gas Alimentari
2011 70 170 35 151
2012 77 130 50 165
2013 88 151 90 15
<?php // es_101_barre_verticali_3D_spese_familiari
$Anno = array("2011","2012","2013");
$Valori = array("70","170","35","151", // 2011 Acqua, Elettricita, Gas, Alimentari
"77","130","50","165", // 2012 Acqua, Elettricita, Gas, Alimentari
"88","151","90","15"); // 2013 Acqua, Elettricita, Gas, Alimentari
$Etichetta[0] = "Acqua"; $Etichetta[1] = "Elettricita"; $Etichetta[2] = "Gas"; $Etichetta[3] = "Alimentari";
$Colonne = count($Valori);
$ImmagineLarghezza = 640;
$ImmagineAltezza = 560;
$Legenda = 80; // spazio sotto il grafici
$EtiPos = 10;// spostamento etichette e valori rispetto alle barre del grafico
$DistanzaFraBarre = 20;
$ColonneLarghezza = floor($ImmagineLarghezza / $Colonne) ;
// Effetto spostamento angolo 3d
$Angolo3d = ($ColonneLarghezza-$DistanzaFraBarre) / 2.5;
$DistanzaFraBarre = min(max($DistanzaFraBarre,1),$ColonneLarghezza);
$Immagine =
imagecreatetruecolor($ImmagineLarghezza,$ImmagineAltezza);
$Grigio =
imagecolorallocatealpha($Immagine,200,200,200,20); // sfondo del grafico
imagefilledrectangle($Immagine,0,0,$ImmagineLarghezza,$ImmagineAltezza,$Grigio);
// font, legenda valori fissi
$Nero =
imagecolorallocatealpha($Immagine,0,0,0,0);
$DimensioneFont = 10; $Font = "font/arial.ttf";
imageline($Immagine,0,$ImmagineAltezza-$Legenda,$ImmagineLarghezza,$ImmagineAltezza-$Legenda,$Nero); // linee di base del grafico
// valori alpha, canali colori di diversa opacità per dare effetto 3d
$Alpha[0] = 0; $Alpha[1] = 100; $Alpha[2] = 50; $A= 0;
for($C=0;$C<12;$C+=4)
{
$Crgba[$C] =
imagecolorallocatealpha($Immagine,255,0,0,$Alpha[$A]); // rosso
$Crgba[$C+1] =
imagecolorallocatealpha($Immagine,0,255,0,$Alpha[$A]); // verde
$Crgba[$C+2] =
imagecolorallocatealpha($Immagine,0,0,255,$Alpha[$A]); // blu
$Crgba[$C+3] =
imagecolorallocatealpha($Immagine,255,0,255,$Alpha[$A]); // viola
$A++; if($A>2){$A = 0;}
}
$ValoreMAX = 0;
// Identificare l'altezza massima delle colonne
$BarraAltezzaMAX = ($ImmagineAltezza-$Legenda) - $ColonneLarghezza;
for($i = 0; $i<$Colonne; $i++){
$ValoreMAX = max($Valori[$i],$ValoreMAX);
}
$C = 0;
$SpazioOrizzontaleAnno = $ImmagineLarghezza/3;// spazio in larghezza per ogni anno
$EtichettaAnno = $SpazioOrizzontaleAnno/2;
for($i=0;$i<$Colonne;$i++)
{
$BarraCorrenteAltezza = ($BarraAltezzaMAX / 100) * (( $Valori[$i] / $ValoreMAX) * 100);
$x1 = $i * $ColonneLarghezza;
$y1 = $ImmagineAltezza - $BarraCorrenteAltezza;
$x2 = (($i+1) * $ColonneLarghezza) - $DistanzaFraBarre;
$y2 = $ImmagineAltezza;
// divisorio verticale fra anni
if($i == 4 or $i == 8)
{
imageline($Immagine,$x1-3,0,$x1-3,$ImmagineAltezza,$Nero);}
// etichette anno
switch ($i) {
case 0:
imagettftext($Immagine, $DimensioneFont, 0, $SpazioOrizzontaleAnno-$EtichettaAnno, $ImmagineAltezza-10, $Nero, $Font, $Anno[0]);
break;
case 4:
imagettftext($Immagine, $DimensioneFont, 0, $SpazioOrizzontaleAnno*2-$EtichettaAnno, $ImmagineAltezza-10, $Nero, $Font, $Anno[1]);
break;
case 8:
imagettftext($Immagine, $DimensioneFont, 0, $SpazioOrizzontaleAnno*3-$EtichettaAnno, $ImmagineAltezza-10, $Nero, $Font, $Anno[2]);
break;
}
// calcola spazio della legenda
$y1 = $y1-$Legenda;
$y2 = $y2-$Legenda;
// Disegna la faccia principale della barra
imagefilledrectangle($Immagine,$x1,$y1,$x2,$y2,$Crgba[$C]);
// legenda etichette tipo di consumo
imagettftext($Immagine, $DimensioneFont, -45, $x1, ($ImmagineAltezza-$Legenda)+$EtiPos, $Nero, $Font, $Etichetta[$C]);
// legenda etichette valori
imagettftext($Immagine, $DimensioneFont, 0, $x1+$EtiPos, $y1-$EtiPos, $Nero, $Font, $Valori[$i]);
// Crea un array per la faccia superiore delle barre per l'effetto 3D
$Lato3D = array($x1,$y1,
$x1+$Angolo3d,($y1-$Angolo3d),
$x2+$Angolo3d,($y1-$Angolo3d),
$x2,$y1);
// Disegna faccia superiore delle barre con effetto 3D
imagefilledpolygon($Immagine, $Lato3D, 4, $Crgba[$C+4]);
// Crea array per lato delle barre per effetto 3D
$Lato3D = array($x2,$y1,
$x2+$Angolo3d,($y1-$Angolo3d),
$x2+$Angolo3d,($y2-$Angolo3d),
$x2,$y2);
// Disegna lato delle barre con effetto 3D
imagefilledpolygon($Immagine,$Lato3D,4,$Crgba[$C+8]);
$C++;if($C>3){$C = 0;}// colore delle barre
}
imagepng($Immagine,"es_101_barre_verticali_3D_spese_familiari.png");
imagepng($Immagine); // al browser
imagedestroy($Immagine); // libera memoria
?>