Hé, je veux dessiner un graphique (distribution des notes des étudiants) dans mon site basé sur PHP. Comment puis-je faire ceci?
pChart est une autre grande bibliothèque graphique PHP.
<?
# ------- The graph values in the form of associative array
$values=array(
"Jan" => 110,
"Feb" => 130,
"Mar" => 215,
"Apr" => 81,
"May" => 310,
"Jun" => 110,
"Jul" => 190,
"Aug" => 175,
"Sep" => 390,
"Oct" => 286,
"Nov" => 150,
"Dec" => 196
);
$img_width=450;
$img_height=300;
$margins=20;
# ---- Find the size of graph by substracting the size of borders
$graph_width=$img_width - $margins * 2;
$graph_height=$img_height - $margins * 2;
$img=imagecreate($img_width,$img_height);
$bar_width=20;
$total_bars=count($values);
$gap= ($graph_width- $total_bars * $bar_width ) / ($total_bars +1);
# ------- Define Colors ----------------
$bar_color=imagecolorallocate($img,0,64,128);
$background_color=imagecolorallocate($img,240,240,255);
$border_color=imagecolorallocate($img,200,200,200);
$line_color=imagecolorallocate($img,220,220,220);
# ------ Create the border around the graph ------
imagefilledrectangle($img,1,1,$img_width-2,$img_height-2,$border_color);
imagefilledrectangle($img,$margins,$margins,$img_width-1-$margins,$img_height-1-$margins,$background_color);
# ------- Max value is required to adjust the scale -------
$max_value=max($values);
$ratio= $graph_height/$max_value;
# -------- Create scale and draw horizontal lines --------
$horizontal_lines=20;
$horizontal_gap=$graph_height/$horizontal_lines;
for($i=1;$i<=$horizontal_lines;$i++){
$y=$img_height - $margins - $horizontal_gap * $i ;
imageline($img,$margins,$y,$img_width-$margins,$y,$line_color);
$v=intval($horizontal_gap * $i /$ratio);
imagestring($img,0,5,$y-5,$v,$bar_color);
}
# ----------- Draw the bars here ------
for($i=0;$i< $total_bars; $i++){
# ------ Extract key and value pair from the current pointer position
list($key,$value)=each($values);
$x1= $margins + $gap + $i * ($gap+$bar_width) ;
$x2= $x1 + $bar_width;
$y1=$margins +$graph_height- intval($value * $ratio) ;
$y2=$img_height-$margins;
imagestring($img,0,$x1+3,$y1-10,$value,$bar_color);imagestring($img,0,$x1+3,$img_height-15,$key,$bar_color);
imagefilledrectangle($img,$x1,$y1,$x2,$y2,$bar_color);
}
header("Content-type:image/png");
imagepng($img);
$_REQUEST['asdfad']=234234;
?>
Votre meilleur pari est de rechercher php_Gd2. C'est une bibliothèque d'images assez décente qui vient avec PHP (juste désactivé dans php.ini), et non seulement vous pouvez sortir vos images finies dans quelques formats, mais il a suffisamment de fonctions que vous devriez être capable de faire un bon graphique assez facilement.
EDIT: cela pourrait aider si je vous donnais quelques liens utiles:
http://www.libgd.org/ - Vous pouvez obtenir la dernière php_Gd2
ici
http://ca3.php.net/Gd - Le php_Gd
Manuel.
Vous pouvez utiliser Google Chart Api pour générer des graphiques.
De loin, la solution la plus simple consiste à simplement utiliser l'API Google Chart http://code.google.com/apis/chart/
Vous pouvez créer des graphiques à barres, des camemberts, utiliser la 3D, et c'est aussi simple que de créer une URL avec certains paramètres. Voir l'exemple simple ci-dessous.
Il existe également plusieurs bibliothèques graphiques disponibles pour PHP pour vous simplifier la vie. JPGraph est une bonne (non gratuite)).
Je n'ai aucune idée de Gd2, mais j'ai fait une chose similaire avec Gd et ce n'était pas si difficile.
Allez sur http://www.php.net/ et recherchez des choses comme
Ce n'est pas aussi flashy que certaines de ces autres solutions, mais puisque vous générez une image, cela fonctionnera dans tous les navigateurs. (sauf lynx ... :-))
/ Johan
Mise à jour: J'ai failli oublier, n'utilisez pas jpeg pour ce type d'images. Les artefacts jpeg seront vraiment ennuyeux, png est une meilleure solution.