Bon voilà, je l'ai testé, ça fonctionne bien. Étudie-le, vois comment tu peux l'adapter à ce que tu veux faire. Note bien que je ne suispas un spécialiste des graphismes à partir de PHP.
<?php
function pc_bar_chart($question, $reponses)
{
/* Définir les couleurs des différentes colonnes */
$couleurs = array(array(255,102,0),
array(0,153,0),
array(51,51,204),
array(255,0,51),
array(255,255,0),
array(102,255,255),
array(153,0,204));
$total = array_sum($reponses['votes']);
/* Définir quelques valeurs d'espacement et d'autres nombres magiques */
$remplissage = 5;
$largeur_ligne = 20;
$echelle = $largeur_ligne * 7.5;
$hauteur_colonne = 10;
$x = $y = $remplissage;
/* Alloue une grande surface de dessin, puisque nous ne connaissons pas à l'avance la taille de l'image */
$image = imagecreate(150, 500);
$arriere_plan = imagecolorallocate($image, 224, 224, 224);
$noir = imagecolorallocate($image, 0, 0, 0);
/* Affiche la question */
$formate = explode("\n", wordwrap($question, $largeur_ligne));
foreach($formate as $ligne)
{
imagestring($image, 3, $x, $y, $ligne, $noir);
$y += 12;
}
$y += $remplissage;
/* Affiche les résultats */
$nb_reponses = count($reponses['reponse']);
for($i = 0; $i < $nb_reponses; $i++)
{
/* Formate les pourcentages */
$pourcent = sprintf('%1.1f', 100 * $reponses['votes'][$i] / $total);
$colonne = sprintf('%d', $echelle * $reponses['votes'][$i] / $total);
/* Utilise la couleur */
$c = $i % count($couleurs); /* Gère les cas où il y a plus de colonnes que de couleurs définies au départ */
$couleur_texte = imagecolorallocate($image, $couleurs[$c][0], $couleurs[$c][1], $couleurs[$c][2]);
/* Dessine la colonne et les nombres en pourcentages */
imagefilledrectangle($image, $x, $y, $x + $colonne, $y + $hauteur_colonne, $couleur_texte);
imagestring($image, 3, $x + $colonne + $remplissage, $y, $pourcent ."%",$noir);
$y += 12;
/* Affiche la réponse */
$formate = explode("\n", wordwrap($reponses['reponse'][$i], $largeur_ligne));
foreach($formate as $ligne)
{
imagestring($image, 2, $x, $y, $ligne, $noir);
$y += 12;
}
$y += 7;
}
/* Recadre l'image en la copiant */
$histogramme = imagecreate(150, $y);
imagecopy($histogramme, $image, 0, 0, 0, 0, 150, $y);
/* Envoie l'image */
header('Content-type: image/png');
imagepng($histogramme);
/* Libère la mémoire */
imagedestroy($image);
imagedestroy($histogramme);
}
/* Utilisation, exemple */
$question = "Quel type d'homme est-il vraiment?";
$reponses = array("reponse" => array(), "votes" =>array());
$reponses['reponse'][] = "Noble de raison";
$reponses['votes'][] = 29;
$reponses['reponse'][] = "Aux facultés infinies";
$reponses['votes'][] = 22;
$reponses['reponse'][] = "Admirable de forme, de mouvement et d'expression";
$reponses['votes'][] = 59;
$reponses['reponse'][] = "Comme un nage dans l'action";
$reponses['votes'][] = 45;
pc_bar_chart($question, $reponses);
?>
Enregistre-le tel quel sur ton serveur sans rien y changer et ouvre la page dans ton navigateur pour voir le résultat.