Si il y a une chose qui est sûre, c'est que PHP-GD c'est chiant: ça ne marche pas chez tous les hébergeurs , ça génère des images qui ne peuvent pas être redimensionnées et c'est plutôt chiant de bosser avec.

Il y a quelques temps de ça, aidé de MsieurHappy (qui a lui aussi travaillé sur les graphes SVG), j'avais développé pour la forge CodingTeam une classe permettant de générer des graphes en SVG. Ces graphes peuvent être admirés, par exemple, ici. J'ai remarqué que plusieurs personnes étaient intéressés par la génération de graphes SVG en PHP, alors, autant faire un petit billet explicatif de cette solution (j'avais d'ailleurs déjà abordé le sujet il y a quelques temps, mais là, c'est plus technique).

L'avantage de SVG c'est qu'on ne génère pas une image mais un fichier XML. Et on peut zoomer comme on veut sur un fichier SVG, l'exporter en png à la taille qu'on veut, tout en gardant une très bonne qualité. Et c'est un avantage indéniable parce que les statistiques, ça peut se réutiliser, s'afficher ailleurs et c'est lourd d'être limité par la taille de l'image.

La classe génère pour le moment des graphes à bâtons et à nuage de points reliés. On peut imaginer encore plein d'autres types de graphes ou encore améliorer ceux existants, bref, on peut encore faire plein de choses sur cette classe, mais déjà, elle marche pas mal.

Publiée sous une licence libre AGPLv3, vous pouvez vous aussi l'utiliser. Le téléchargement se fait ici (et la CSS qui va avec est là, pour avoir les infobulles).

Un exemple tout bête d'utilisation de cette classe :

$drawsvgchart = new DrawSVGChart();

Header('Content-Type: image/svg+xml; charset=utf-8');
$legend = array('#5276A9', 'bières');

$datas = array('blonde' => 21, 'brune' => 15, 'ambrée' => 28);
$drawsvgchart->createChart($datas, array($legend), FALSE, FALSE);
echo $drawsvgchart->getXMLOutput();
Là, nous avons représenté des parts (tout à fait arbitraires) de quelques couleurs de bières, maintenant, attaquons-nous à la représentation d'une évolution.
$drawsvgchart = new DrawSVGChart();

Header('Content-Type: image/svg+xml; charset=utf-8');
$legend = array('#5276A9', 'consommation de bières');

$datas = array('janvier' => 64, 'février' => 42, 'mars' => 50);
$drawsvgchart->createChart($datas, array($legend), FALSE, TRUE);
echo $drawsvgchart->getXMLOutput();
Et pour terminer tout ça, voyons un peu l'état actuel du réfrigérateur.
$drawsvgchart = new DrawSVGChart();

Header('Content-Type: image/svg+xml; charset=utf-8');
$legend = array(array('#5276A9', 'bières'),
array('#CD3333', 'bières à jeter'));

$datas = array(array('maison' => 64, 'travail' => 42, 'voisin' => 54),
array('maison' => 0, 'travail' => 5, 'voisin' => 10));
$drawsvgchart->createChart($datas, $legend, FALSE);
echo $drawsvgchart->getXMLOutput();
Bref, c'est tout simple et c'est plutôt joli.

Si vous êtes intéressés par cette manière de générer vos graphiques, n'hésitez pas à tester. Et si vous avez des idées d'améliorations ou même du code, n'hésitez pas à proposer.