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: