6.Le langage PHP

6.14.JpGraph pour tracer courbes et diagrammes

6.14.1.Introduction

Nous avons vu que PHP permet de créer des images à la volée, via la bibliothèque GD[comment?]. Cela nous a par exemple permis de tracer des histogrammes. Mais tracer des histogrammes, des diagrammes, des camemberts réclame pas mal de travail ne serait-ce que pour régler les problèmes d'échelle. Dans ce cas, il peut être fort judicieux d'utiliser une bibliothèque pour se simplifier la vie. C'est ce que propose JpGraph.
JpGraph est un ensemble de fichiers PHP. Nous pouvons même dire, un ensemble de classes puisque JpGraph est écrit en programmation orientée objet[c'est quoi?] (nous ne nous intéresserons, ici, qu'à la version 2 et supérieure de JpGraph, prévue pour fonctionner avec PHP 5.1 et plus).

6.14.2.Installation

Comme JpGraph s'appuie sur la bibliothèque GD (version 2) il convient de s'assurer que ce module est installé[comment?].
JpGraph, quant à lui, est à télécharger ici (veillez bien à prendre la version pour PHP>=5.1). Une fois l'archive .tar.gz récupérée, vous pouvez la décompresser dans le dossier de votre choix. Seul le contenu du répertoire src/ est nécessaire à l'exécution (son sous répertoire Examples n'est pas utile non plus). Vous devez donc copier ce contenu dans un dossier accessible (pour un include) depuis votre site web. Si, vous avez un doute, copiez simplement le contenu de src dans un dossier jpgraph à la racine de votre espace web[où?].

6.14.3.Histogramme

L'histogramme que nous avons tracé (pas simplement) dans le chapitre sur la bibliothèque GD, nous pouvons le tracer avec JpGraph, via le script suivant:
<?php
require_once("include_path_inc.php");

require_once("jpgraph.php");
require_once("jpgraph_bar.php");

$donnees = array(12,23,9,58,23,26,57,48,12);

$largeur = 250;
$hauteur = 200;

// Initialisation du graphique
$graphe = new Graph($largeur, $hauteur);
// Echelle lineaire ('lin') en ordonnee et pas de valeur en abscisse ('text')
// Valeurs min et max seront determinees automatiquement
$graphe->setScale("textlin");

// Creation de l'histogramme
$histo = new BarPlot($donnees);
// Ajout de l'histogramme au graphique
$graphe->add($histo);

// Ajout du titre du graphique
$graphe->title->set("Histogramme");

// Affichage du graphique
$graphe->stroke();
?>
et voici le résultat
Histogramme avec JpGraph
C'est quand même plus simple, non?
Les commentaires associés au script devraient être suffisamment clairs pour comprendre le principe. Voici tout de même deux petites informations.
Le fichier jpgraph.php doit être inclus quelque soit le type de graphique voulu. Le fichier jpgraph_bar.php est dédié au tracé d'histogramme.
Nous avons créé un petit script include_path_inc.php afin de modifier le chemin de recherche des scripts PHP pour que les fichiers jpgraph_*.php puissent être trouvés. Copiez le script suivant au même endroit que jpgraph_histo.php.
<?php 
set_include_path(get_include_path().PATH_SEPARATOR.
                 dirname(__FILE__)."/jpgraph/");
?>
Si vous avez copié le contenu du dossier src de JpGraph dans un repertoire jpgraph au même endroit que le script jpgraph_histo.php vous ne devriez avoir rien a changer, sinon, modifiez le chemin précisé dans include_path_inc.php pour pointer vers le dossier contenant les fichiers de JpGraph.
rem
  • ici, dirname(__FILE__) est le dossier où se trouve le fichier include_path_inc.php

6.14.4.Courbe

Vous auriez préféré une courbe plutôt qu'un histogramme? Facile, il suffit de
  • Remplacer l'inclusion de jpgraph_bar.php par jpgraph_line.php.
  • Remplacer l'instanciation de la classe BarPlot() par BarLine().
ce qui donne
Courbe avec JpGraph
dont voici le code

6.14.5.Superposition de tracés

Pour superposer des tracés, rien de plus simple. Il suffit de les ajouter, les uns après les autres, avec la méthode add() de l'objet Graph.
Superposition de traces avec JpGraph
dont voici le code
Ce n'est toujours pas ce que vous vouliez? Alors poursuivons.