Générer des Graphes en SVG avec PHP

J’avais lu il y a quelques temps un article très intéressant de Brian Venn (Software Engineer, IBM), publié sur le site DeveloperWorks, et qui s’intitulait :
« Render dynamic graphs in SVG »

Je vous encourage vivement à lire son article dont le lien est le suivant :

www.ibm.com/developerworks/xml/library/x-svggrph/

Les exemples de code fournis par Brian en complément de son article étaient écrits en Java, et j’ai eu envie de les réécrire en PHP, pour voir si je parvenais à un résultat intéressant.

J’ai obtenu un premier jet qui était un portage assez basique des classes Java écrites par Brian. Puis j’ai retravaillé ce code de manière à refactoriser certains éléments et à éliminer un peu de code redondant d’une classe à l’autre. J’ai également ajouté une interface pour améliorer la robustesse du code, et j’ai ajouté les méthodes setHeight() et setWidth() de manière à pouvoir définir dynamiquement les hauteurs et largeurs des graphes (elles étaient définies « en dur » dans la version proposée par Brian).

Au final, j’ai abouti à une classe modèle (SVGChartModel) servant de socle à trois classes instanciables permettant de générer les 3 types de graphes décrits par Brian Venn dans son article : SVGBarchart, SVGLineGraph et SVGScatterGraph.

La génération d’un graphe SVG se fait très simplement au sein d’un script PHP (ici le script barchart.php) :

$test = '10 20 30 40 50 60 70 100 25';
$graph = new SVGBarchart($test);
$graph->setWidth(800) ;
$graph->setHeight(600) ;
$graph->drawGraph();
echo $graph->render();

On note que les données sont ici transmises « en dur » via la variable $test, mais on peut les charger dynamiquement à partir de n’importe quelle source (XML, base de données, CSV…).

Ce script PHP est « appelé » dans une page HTML au moyen de la balise HTML « object », comme vous le verrez en analysant le code source joint à cet article.

Voici pour le principe général, pour le reste, je vous laisse le soin d’analyser le code PHP que je joins à cet article sous la forme d’un fichier Zip.

Exemple de graphes obtenus à partir des classes PHP jointes à cet article :

graphes_exemples

Code source à télécharger :

FichieSVGGraphDevWorksr ZIP

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *