Utilizzo di cookies
Script GD libray con PHP Modelli Creare immagine Colore e trasparenza Disegnare Pennelli Misurare Filtri Testo Copy Salvare Miscellanea
GD library con PHP
Grafico 3D barre verticali
Spese familiari


e-book
cartaceo
Anno Acqua Elettricità Gas Alimentari
2011
2012
2103
Cambiare i valori e premere
Grafico a barre verticali 3D

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
?>