Publié le 21/10/2010
Auteur fobec
Réseaux sociaux
0 partages
0 tweets
0 plus
0 commentaires

Afficher un graphique histogramme avec GD

La librairie GD contient un ensemble de fonctions pour générer des images à la volée. Les formats courants sont supportés gif, jpg et png, les images sont le plus souvent directement affichées dans le navigateur.

Créer un graphique à la volée

La class HistoGraph est un exemple de génération d'un graphique de type histogramme:
- function addValue(): ajouter les valeurs du graphique une à une. Cette méthode convient à une boucle sur le résultat d'une requete SQL,
- function draw(): initialiser le graphiquer puis dessiner chaque élément du graphique.
<?php
/**
 * Afficher un graphique histogramme avec GD
 * Fobec 2010
 */
 
class HistoGraph {
    /** array des valeurs du graph */
    private $rs=array();
 
    /**
     * Ajouter une valeur au graph à afficher
     * @param int $val
     */
    public function addValue($val) {
        array_push($this->rs, $val);
    }
 
    /**
     * Générer un histogramme
     * @param int $width largeur
     * @param int $height hauteur
     */
    public function draw($width, $height) {
        // Nombre de colonne à afficher
        $columns=count($this->rs);
        // Espacement entre les colonnes
        $pad_column=10;
        // Hauteur du cartouche au bas du graph
        $pad_bottom=30;
        // Calculer la largeur d'une colonne et allocation des couleurs
        $column_width = $width / $columns ;
        $im= imagecreate($width,$height);
        $blue=imagecolorallocate ($im,0,102,255);
        $gray=imagecolorallocate ($im,50,50,50);
        $white=imagecolorallocate ($im,255,255,255);
        // Remplir le fond en blanc
        imagefilledrectangle($im,0,0,$width,$height,$white);
        $maxv = 0;
        // Déterminer la valeur maximale
        for($i=0;$i<$columns;$i++) {
            $maxv = max($this->rs[$i],$maxv);
        }
        // Dessiner le rectangle pour chaque valeur
        for($i=0;$i<$columns;$i++) {
            $column_height = ($height / 100) * (( $this->rs[$i] / $maxv) *100);
            $x1 = $i*$column_width+$pad_column/2;
            $y1 = $height-$column_height-$pad_bottom;
            $x2 = (($i+1)*$column_width)-$pad_column+$pad_column/2;
            $y2 = $height-$pad_bottom;
            imagefilledrectangle($im,$x1,$y1,$x2,$y2,$blue);
        }
        // Ajouter une ligne
        imageline($im, 0, $height-$pad_bottom, $width, $height-$pad_bottom,  $gray);
        //Ajouter du texte
        imagestring($im, 10, 20, $height-$pad_bottom+10, 'Exemple histogramme fobec.com', $gray);
        // Renseigner le header et envoyer l'image
        header ("Content-type: image/png");
        imagepng($im);
    }
}
 
/**
 * Exemple d'utilisation de la class
 */
$histoGraph=new HistoGraph();
//Ajouter les valeurs, en gal une boucle issue d'un requete SQL
$histoGraph->addValue(23);
$histoGraph->addValue(32);
$histoGraph->addValue(12);
$histoGraph->addValue(24);
$histoGraph->addValue(30);
$histoGraph->addValue(22);
$histoGraph->addValue(18);
// Afficher le graphique
$histoGraph->draw(300, 200);
?>

Exemple de graphique avec GD

A l'execution du script ci-dessous, l'image suivante s'affiche dans le navigateur

gd_graph
Pour créer un histogramme vite fait, sans intégrer d'API supplémentaire, la librairie GD permet de réaliser un graphique qui tient la route.

Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
php5 - class
Mise a jour
21/10/2010
Visualisation
vu 4951 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 261 articles
|BIO_PSEUDO|
Commentaires récents

Publié par need help dans java

Merci pour cet exemple.
Est ce possible de récupérer le flux video d'une camera ou bien une appareil photo branché par USB.

Merci d'avance.

Publié par Yannick dans tuto

Sur un de mes sites j'ai vraiment du mal a gerer le gzip sur 1and1, Je vais tout de suite tester tout ca et je vous tiens informe :)

Publié par Kal747 dans php5

Merci pour l'info !

Publié par fobec dans tuto

Pour le script fonctionne, renseigner les constantes $SITE_PATH et $CACHE_PATH. Remplacer les valeurs avec les chemins de son propre site.

Publié par Christophe dans CMS

je te propose d'améliorer la fonction
procedure TForm1.Button1Click(Sender: TObject);
begin
GetDesktopListViewHandle;
ListView_SetTextBkColor(hLV, $FFFFFFFF);
ListView_Re...