// peut être appelée dans votre code pour créer au vol un graphique (histogramme 2 ou 3D , camembert 2 ou 3d)
//exemple => <img src="cree_graphique.php?titre=Titre du graphique&n=1&noms=categorie1;categorie2;categorie3&valeurs=1234,500,734&pertinences=0,3,5&saisies=saisie1;saisie2&la=700&ha=120&type=4&auvol=1" />';
// ou comme une procédure incluse pour creer un fichier image graphq.gif dans le dossier images/ du repertoire courant de cree_graphique.php
// à inclure dans votre code php par include_once('cree_graphique.php');//include_path inutile car dans dossier courant
//exemple => if (cree_graphique($titre,$q,etc...,false)) print <img src="graph$q.gif">;
Source / Exemple :
<?php
// peut être appelée dans votre code pour créer au vol un graphique (histogramme 2 ou 3D , camembert 2 ou 3d)
//exemple => <img src="cree_graphique.php?titre=Titre du graphique&n=1&noms=categorie1;categorie2;categorie3&valeurs=1234,500,734&pertinences=0,3,5&saisies=saisie1;saisie2&la=700&ha=120&type=4&auvol=1" />';
// ou comme une procédure incluse pour creer un fichier image graphq.gif dans le dossier images/ du repertoire courant de cree_graphique.php
// à inclure dans votre code php par include_once('cree_graphique.php');//include_path inutile car dans dossier courant
//exemple => if (cree_graphique($titre,$q,etc...,false)) print <img src="graph$q.gif">;
//.................................... début de l'exécution
if (isset($_GET['auvol'])) //renvoyer l'image au vol
{
header("Content-type: image/gif");
$im=cree_graphique($_GET['titre'],$_GET['n'],$_GET['noms'],$_GET['valeurs'],$_GET['pertinences'],$_GET['saisies'],strval($_GET['la']),strval($_GET['ha']),strval($_GET['type']),true);
imagegif($im); //fabrication et renvoi
imagedestroy($im);//libération mémoire
}// sinon la procedure incluse ci-dessous est appelée directement par le code
//......................................fin du l'exécution
//******************** FONCTION de fabrication du graphique
function cree_graphique($titre,$q,$noms,$val,$pertinence,$saisies,$la,$ha,$type,$auvol) //le grahique ne tient pas compte des pondérations, donne simplement la proportion
{
//prevenir erreur si $type=0 (aucun graphique)
if ($type==0) $type=4; //sinon 1 - barres 2D , 2 - barres 3D , 3 - camembert 2D, 4 - camembert 3D
//affichage ou non du degré de pertinece des réponses
$aff_pertinence=($pertinence!='');
//Il y a des saisies utilisateurs autres que les catagories noms, à représenter dans le graphique
$saisie=($saisies!='');
// créer l'image sur fond gris
$im = imagecreate($la, $ha);
imagefilledrectangle($im, 0,0, $la, $ha,imagecolorallocate($im,153,153,153));
//encadrer en noir
imagerectangle($im, 0,0, $la-1, $ha-1,imagecolorallocate($im,0,0,0));
//titre du graphique en blanc
imagestring($im, 3, 10,2,$titre,imagecolorallocate($im,255,255,255));
//choix de la couleur de base à nuancer
switch ($q%6)
{
case 0 : $c="vert";break ;
case 1 : $c="cyan";break ;
case 2 : $c="magenta";break;
case 3 : $c="rouge";break ;
case 4 : $c="bleu";break ;
case 5 : $c="jaune";break ;
}
//mettre en tableau les valeurs envoyées, en allongeant de 1 pour prévoir les saisies
$t=split(';',$noms);
$max=count($t); // max+1 valeurs , pour prévoir les saisies
$v=array($max); //valeurs en pourcentage
$nom=split(';',$noms);array_push($nom,'');
$v0=split(';',$val);array_push($v0,0);
$p0=split(';',$pertinence);array_push($p0,0);
$co=array($max);
if ($saisie)
{
$nom[$max]="Autres saisies ... ";
$mul=10;
if ($aff_pertinence) $p0[$max]=10;
$z=split(';',$saisies);
$v0[$max]=count($z)*$mul; //nb de saisies multipliées par 10 pour les voir...
}
else $max=$max-1;
//calcul des pourcentages
$s=0;
for ($i=0;$i<=$max;$i++) $s+=$v0[$i];
if ($s==0) $s=100; //prevenir somme nulle
for ($i=0;$i<=$max;$i++) $v[$i]=100*$v0[$i]/$s;
//aspect du graphique
$e=40; //épaisseur pour la 3D
$cx=2*$la/3 ;$cy=$ha/2+$e/2+4; // centre du camembert
if ($type==4) {$lac=$la/2.5;$hac=$ha/2.5;$angle0=0;} else {$lac=$la/2;$hac=$ha/2;$angle0=0;} //grand axe/petit axe - angle0 fait tourner le camembert dans son plan...
// decalage vertical de la legende
$dh=$ha/(2+$max);
if ($type<3) // *********************************** barres horizontales 2 ou 3D
{
//rechercher maxi du pourcentage
$maxi=0;for ($i=0;$i<=$max;$i++) {if ($v[$i]>$maxi) {$maxi=$v[$i];$j=$i;$ech=100/$v[$i];}}
//le prendre (j) comme référence à 100% et recalculer v(i)
for ($i=0;$i<=$max;$i++) {if ($i==$j) $v[$i]=2*$la/3-40; else $v[$i]=$ech*$v[$i]*(2*$la/3-40)/100;}
//legende + barres 2D
for ($i=0;$i<=$max;$i++)
{
if ($aff_pertinence) $s='('.$p0[$i].') '; else $s='';
imagestring($im, 2, 40,$dh+ $i*$dh, $s.formate($nom[$i],35).$v0[$i],couleur($im,'noir',0,10));//legende
if ($type==1) $co[$i]=couleur($im,$c,$i-1,$max); else $co[$i]=couleur($im,$c,$i,$max); //plus clair en 3D
imagefilledrectangle($im, 10,$dh+ $i*$dh, 30,$dh +15 + $i*$dh,$co[$i]);
if ($type==1) $d=0; else $d=6; //ajustage pour 3D [$i]=couleur($im,$c,$i-1,$max); else $co[$i]=couleur($im,$c,$i,$max); //plus clair en 3D
imagefilledrectangle($im, $la/3 +30 - $d, $dh + $d + $i*$dh, $la/3 + 30 - $d + $v[$i],$dh + 15 + $i*$dh,$co[$i]); // face avant - barres 2D
}
if ($type==2) // si barres 3D
for ($f=0;$f<7;$f++) // mise en relief par glissments et nuances
{
for ($i=0;$i<=$max;$i++)
{
$co[$i]=couleur($im,$c,$i-0.5,$max); //extrémité droite
imagefilledrectangle($im,$la/3 + 30 -$f + $v[$i],$dh + $i*$dh+$f, $la/3 + 30 -$f+1 + $v[$i],$dh + 8+$f + $i*$dh,$co[$i]);
$co[$i]=couleur($im,$c,$i-0.8,$max);//face supérieure
imagefilledrectangle($im, $la/3 -$f + 30,$dh + $f+ $i*$dh, $la/3 + 30 -$f + $v[$i],$f+1 + $dh + $i*$dh,$co[$i]);
}
}
}
else // **************************************** représentations circulaires : camembert 2D ou 3D
{
//bloc couleur + légende
for ($i=0;$i<=$max;$i++)
{
$co[$i]=couleur($im,$c,$i-1,$max);
imagefilledrectangle($im, 10,$dh+ $i*$dh, 30,$dh +15 + $i*$dh,$co[$i]);
$co[$i]=couleur($im,$c,$i-0.5,$max);//couleurs un peu plus sombre pour les tranches...0.5 pour ne pas les confondre avec le dessus
if ($aff_pertinence) $s='('.$p0[$i].') '; else $s='';
imagestring($im, 2, 40, $dh + $i*$dh, $s.formate($nom[$i],35).$v0[$i].' ('.number_format($v[$i],1,'.',' ').'%)',couleur($im,'noir',0,10));// 26 premiers caractères
}
//camembert
$deb=$angle0;
//epaisseur en faisant glisser vers le haut les ellipses sectorisées vides
for ($f=0;$f<$e;$f++)
{
for ($i=0;$i<=$max;$i++)
{
$fin=$deb+$v[$i]*3.6;
$x=$cx;$y=$cy;
if ($type==4) {$x=$cx+$lac/10*cos(($fin+$deb)/2*pi()/180);$y=$cy+$hac/10*sin(($fin+$deb)/2*pi()/180);}
if ($type==4) imagefilledarc($im ,$x , $y -$f, $lac ,$hac , $deb, $fin ,$co[$i],IMG_ARC_PIE); else imagefilledarc($im ,$x , $y -$f, $lac ,$hac , $deb, $fin ,$co[$i],IMG_ARC_NOFILL ); // si type 2D inutile de remplir
$deb=$fin;
}
}
$deb=$angle0;
// finir par le dessus plus clair, avec des étisuettes en blanc
for ($i=0;$i<=$max;$i++)
{
$co[$i]=couleur($im,$c,$i-1,$max);
$fin=$deb+$v[$i]*3.6;
$x=$cx;$y=$cy;
if ($type==4) {$x=$cx+$lac/10*cos(($fin+$deb)/2*pi()/180);$y=$cy+$hac/10*sin(($fin+$deb)/2*pi()/180);}
imagefilledarc($im ,$x , $y -$e, $lac ,$hac , $deb, $fin ,$co[$i],IMG_ARC_PIE);//avec remplissage
//etiquettes % avec couleurs légende
$co[$i]=couleur($im,'blanc',0,10);
$x=$cx+$lac/2*cos(($fin+$deb)/2*pi()/180);
$y=$cy-10+$hac/2*sin(($fin+$deb)/2*pi()/180);
imagestring($im, 3, $x,$y-$e, number_format($v[$i],1,'.',' ').'%',$co[$i]);
$deb=$fin;
}
}
if ($auvol) return $im; // retourner le handle de l'image
else //sinon créer le fichier image dans le dossier images/
{
imagegif($im,'images/graph'.$q.'.gif');
imagedestroy($im);//libération mémoire
return true;
}
}
//couleurs et dégradés $d niveau du dégradé - $e niveau de degradation maxi
function couleur($im,$co,$d,$nb)
{
$e=255/($nb+1);
$comp=255-$e*($d+1);
if ($comp<0) $comp=0;
if ($comp>255) $comp=255;
$co=strtoupper($co);
if ($co=="NOIR") return imagecolorallocate($im,0,0,0);
else if ($co=="BLANC") return imagecolorallocate($im,$comp,$comp,$comp);
else if ($co=="JAUNE")return imagecolorallocate($im,$comp,$comp,0);
else if ($co=="CYAN") return imagecolorallocate($im,0,$comp,$comp);
else if ($co=="MAGENTA") return imagecolorallocate($im,$comp,0,$comp);
else if ($co=="ROUGE") return imagecolorallocate($im,$comp,0,0);
else if ($co=="VERT") return imagecolorallocate($im,0,$comp,0);
else if ($co=="BLEU") return imagecolorallocate($im,0,0,$comp);
else return imagecolorallocate($im,0,0,0);
}
function formate($s,$nb)
{
$s.='..........................................';
return substr($s,0,$nb).'... : ';
}
?>
Conclusion :
Trés pratique pour dépouiller instantanément un sondage, questionnaire ... cf copie d'écran
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.