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 a barre orizzontali
Sondaggio vacanza


e-book
cartaceo
molto importante: importante: importante ma non sufficiente:
ininfluente: nonrisponde:
Cambiare i valori e premere
grafico a barre orizzontali sondaggio vacanza

Il grafico a barre è un metodo per riassumere una serie di dati riguardanti una categoria. 
I valori sono visualizzati utilizzando più barre della stessa larghezza, e ciascuna barra rappresenta una determinata categoria. 
L'altezza di ciascuna barra è proporzionale al valore o somma di valori della categoria che rappresenta. 
Nel grafico a barre possono anche essere inserite e sovrapposte informazioni aggiuntive con linee di riferimento fra valori o periodi omogenei ecc. (sull'esempio dei grafici lineari).


Il grafico verrà formato sulle risposte ad un ipotetico sondaggio per la domanda:
Importanza di luoghi culturali e di ristorazione nel progettare una vacanza?
Hanno risposto 152 persone selezionando una fra le 5 risposte ammesse (schema sottostante).
Naturalemte il grafico si adegua col variare delle risposte e della lro quantità.


Risposta                                Quantità
molto importante                    43
importante                                    61
importante ma non sufficiente    34
ininfluente                                      4
non risponde                            10


Verrà creato un grafico con 5 barre, ognuna corrispondente a ciascuna risposta possibile.
Ogni barra avrà colore diverso dalle altre e dimensione proporzionale alla quantità di risposte avute per ciascuna possibilità ammessa.


<?php 
$moltoimportante = isset($_POST['moltoimportante']) ? $_POST['moltoimportante'] : 43;
$importante = isset($_POST['importante']) ? $_POST['importante'] : 61; 
$impnonsufficiente = isset($_POST['impnonsufficiente']) ? $_POST['impnonsufficiente'] : 34; 
$ininfluente = isset($_POST['ininfluente']) ? $_POST['ininfluente'] : 4; 
$nonrisponde = isset($_POST['nonrisponde']) ? $_POST['nonrisponde'] : 10; 


function Crea_Grafico($Domanda, $Risposte) {
// Immagine sulla quale verrà costruito il grafico
// non è l'immagine definitiva, 
// La parte significativa di $Immagine questa copiata su $ImmagineConGrafico
// eliminando le parti vuote
$Immagine_Larg = 600; $Immagine_Alt = 350;
$Immagine = imagecreate($Immagine_Larg, $Immagine_Alt);


   imagecolorallocate($Immagine, 200, 200, 200); /// colore sfondo immagine
   $Nero = imagecolorallocate($Immagine, 0, 0, 0); // colore del testo


$ColoreBarra[0] = imagecolorallocate($Immagine,255,255,0);
$ColoreBarra[1] = imagecolorallocate($Immagine,0,255,0);
$ColoreBarra[2] = imagecolorallocate($Immagine,0,0,255);
$ColoreBarra[3] = imagecolorallocate($Immagine,255,0,0);
$ColoreBarra[4] = imagecolorallocate($Immagine,255,0,255);
$c = 0; // colore barra corrente


/*** valori di spaziatura ***/
$y = 5; // spazio prima della stringa del titolo
$x = 5; // distanza dal margine sinistro del contenuto dell'immagine
    
$Quant_MAX_caratt_linea = 50; // numero massimo caratteri in una linea del titolo

// lunghezza della barra in funzione della più lunga linea possibile
// in pratica la scala del grafico
$Scala = $Quant_MAX_caratt_linea * 15;

$AltezzaBarreGrafico = 20; // altezza barre del grafico,
// cioà larghezza della base di ciascuna barra (infuenza l'altezza dell'immagine che contiene il grafico)


// somma la quantità delle risposte avute
$TotaleRisposte = array_sum($Risposte['RisposteQuantita']);

// stampa la domanda, se necessario su più righe
// usato la funzione wordwrap per stabilire esattamente quando andare a capo 


    $divisorio = explode("n", wordwrap($Domanda." Totale risposte: ".$TotaleRisposte, $Quant_MAX_caratt_linea));
    foreach ($divisorio as $line) {
imagestring($Immagine, 5, $x, $y , $line, $Nero);
    $y += 16; // distanza per eventuale nuova line di testo
    }
   $y += 16; // inserisce linea vuota come distanza fra domanda e risposte


// Stampa le risposte
    for ($i = 0; $i < count($Risposte['RispostaGiudizio']); $i++) { 


// Percentuali sul totale di ciascuna risposta
        $Percentuale = sprintf('%1.1f', 100 * $Risposte['RisposteQuantita'][$i]/$TotaleRisposte);
        $BaseBarraRettangolo = sprintf('%d', $Scala * $Risposte['RisposteQuantita'][$i]/$TotaleRisposte);


// Disegna le barre del grafico
        imagefilledrectangle($Immagine, $x, $y, $x + $BaseBarraRettangolo, $y + $AltezzaBarreGrafico, $ColoreBarra[$c]);
       $c++; if($c>4){$c=0;}
  
  // al termine di ciascuna barra disegna il numero delle risposte e loro percentuale sul totale
  imagestring($Immagine, 4, $x + $BaseBarraRettangolo, $y, "(risp.".$Risposte['RisposteQuantita'][$i].") "."$Percentuale"."%", $Nero);
         
// stampa le risposte per ciascuna barra
$y += 20;// posizione testo per la barra corrente eventualmente mandando a capo se troppo lungo
// usando la funzione wordwrap
         $wrapped = explode("n", wordwrap($Risposte['RispostaGiudizio'][$i], $Quant_MAX_caratt_linea));
         foreach ($wrapped as $line) {
         imagestring($Immagine, 3, $x, $y, $line, $Nero);
         $y += 22;
         }
         $y += 7;
     }


// crea immagine sulla quale copiare il grafico
// $y = all' Altezza necessaria per il Grafico
// non sarebbe strettamente necessaia, serve a eliminare lo spazio in basso non usato
$ImmagineConGrafico = imagecreate($Immagine_Larg, $y ); 


// copia la parte significativa del'imamigne creata sull'immagine definitiva  
imagecopy($ImmagineConGrafico, $Immagine, 0, 0, 0, 0, $Immagine_Larg, $Immagine_Alt);


imagepng($ImmagineConGrafico,"es_98_grafico_a_barre__orizzontali_sondaggio_vacanza.png");


// libera memoria
     imagedestroy($Immagine); imagedestroy($ImmagineConGrafico);
}


$Domanda = 'Importanza di luoghi culturali e di ristorazione nel progettare una vacanza.';


$Risposte['RispostaGiudizio'][  ] = 'molto importante';
$Risposte['RisposteQuantita'][  ]  = $moltoimportante;


$Risposte['RispostaGiudizio'][  ] = 'importante';
$Risposte['RisposteQuantita'][  ]  = $importante;


$Risposte['RispostaGiudizio'][  ] = 'importante ma non sufficiente';
$Risposte['RisposteQuantita'][  ]  = $impnonsufficiente;


$Risposte['RispostaGiudizio'][  ] = 'ininfluente';
$Risposte['RisposteQuantita'][  ]  = $ininfluente;


$Risposte['RispostaGiudizio'][  ] = 'non risponde';
$Risposte['RisposteQuantita'][  ]  = $nonrisponde;


Crea_Grafico($Domanda, $Risposte);
?>
<!doctype html><html><head><meta charset="utf-8"></head><body>
<img src="NomeFile.png">
</body></html>

Risultato: