phpGraph : afficher des graphiques svg grâce à php

Classé dans Outils

C'est nawel et c'est l'heure des cadeaux. Voici le mien pour ceux qui le souhaitent.

Il s'agit d'une librairie que je vous ai concoctée et qui vous permet de générer des histogrammes, des diagrammes ou des disques de données en deux coups de cuillères à pot.

2000 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75

Comment l'utiliser ?

Il faut d'abord importer le fichier contenant la classe dans votre projet :

<?php include('phpGraph.php');?>

Et disposer d'un tableau de données d'une ou deux dimensions :

<?php $data = array(
    "2000" => 0,
    "2002" => 25,
    "2003" => 32,
    "2004" => 1,
    "2005" => 58,
    "2006" => 31,
    "2007" => 79,
    "2008" => 51,
    "2009" => 54,
    "2010" => 12,
    "2011" => 17,
    "2012" => 14,
    "2013" => 13
);?>

On appelle ensuite une instance de la classe :

<?php $G = new phpGraph();?>

Puis on affiche notre graphique. Par défaut, c'est un graphique linéaire qui s'affiche mais on pourra modifier ses différentes propriétés via les options :

<?php echo $G->draw($data); ?>

L'entête de la page devra faire appel à la feuille de style spécifique à phpGraph. Cette feuille est donnée en exemple et peut être modifiée afin de personnaliser un peu plus les graphiques.

<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0"> 
    <title>phpGraph</title>
    <link rel="stylesheet" type="text/css" href="phpGraph_style.css" media="all">
</head>
<body>(...)

J'ai mis en ligne quelques exemples de mon cru pour que vous puissiez voir le rendu de la librairie.

Le projet est hébergé sur Github.

 

PS : Le projet étant en évoution permanente, merci de consulter régulièrement la page d'exemples et la page github pour voir les changements.

18 commentaires

  1. Bonjour,
    Je vais tester ;) Merci
    Possible de faire des histogrammes avec cumul de séries ?
    (ex: Jan : Serie1 rouge + Serie2 bleu, fev : Serie1 rouge + Serie2 bleu, .....)
    Bon courage

  2. Youhou, un premier utilisateur :)
    Je suis content que tu y trouves un intérêt. Pour répondre à ta question, non, ce n'est pas (encore) possible. Mais j'y travaille.

    Pour info, il y a encore quelques bugs de positionnement des histogrammes lorsqu'on combine lignes (avec des valeurs négatives) et histogrammes (dont le mini est à 0).
    Je vais essayer de corriger ça rapidement.

    Si tu rencontres des bugs, fais moi signe. Merci encore.

  3. C'est corrigé.

    Je vais me pencher maintenant sur ta demande...

    Edit : réflexion faite, si j'ai bien compris ta demande, phpGraph gère ça depuis le début. Reprends l'exemple 2 et remplace les types par 'bar'. Tu devrais obtenir le résultat que tu désires.

  4. Super !
    Ca remplacera une JPGraph vieillissante et plus mise à jour depuis 2010 (http://jpgraph.net/)...

  5. Gravatar Guillaume Roche // lundi 27 octobre 2014 @ 23:07

    Salut,
    j'ai fait un test et j'ai un bug avec les "pie" .
    Exemple : ce tableau de données :
    array(
    (int) 3 => array(
    (int) 4200 => (int) 69,
    (int) 4196 => (int) 22,
    (int) 4201 => (int) 20,
    (int) 4194 => (int) 8,
    (int) 4195 => (int) 6
    )
    Le camembert se rempli avec la part la plus grande pour 4194 ... je ne vois pas pourquoi ...
    Merci d'avance,

  6. @Guillaume Roche : Je vais regarder ce qui se passe mais à vue de nez, il me semble que cela vient de la structure de ton tableau qui ne doit avoir qu'une dimension. Merci pour le signalement.

  7. Bravo pour ce beau script, si, vraiment, j'insiste. Vous avez donné de votre temps et de votre énergie pour vous lancer dans cette aventure, utilisant des langages qui, j'espère, resteront l'avenir du web.
    Je teste actuellement le script, il est assez facile d'utilisation.
    (mon idée,c'est de faire un graphique pour moi, savoir combien d'offres d'emploi je postule par mois, histoire de savoir où en est ma motivation).
    Bref, un très grand merci.

  8. J'ai lu votre tuto sur phpgraph avec beaucoup d’intérêts. Je souhaite mettre des graphs sur mon site. Par contre je ne trouve pas la librairie phpgraph.php. Serait-elle inclut sur le serveur php ou faut-il la télécharger?
    Veuillez m'indiquer la procédure.
    Par avance merci.
    Cordialement.

  9. Il suffit de se rendre sur github (<a href="http://jerrywham.github.io/phpGraph/" rel="nofollow" onclick="window.open(this.href);return false;" title="http://jerrywham.github.io/phpGraph/">http://jerrywham.github.io/phpGraph/</a>) pour la télécharger et de suivre les exemples (<a href="http://www.ecyseo.net/?static8/phpgraph" rel="nofollow" onclick="window.open(this.href);return false;" title="http://www.ecyseo.net/?static8/phpgraph">http://www.ecyseo.net/?static8/phpgraph</a>) comme c'est indiqué dans ce tuto ;)

  10. Bonjour, et merci pour ce script !!

    J'aimerai que la graduation des odronnées (et donc le graph) ne commence pas à 0, mais à la valeur mini du tableau ?

    Merci

  11. Bonjour merci pour votre bibliothèque de graph c'est tres bien. Mais j'ai un problème est-il possible de remplacer les informations du tableau par des vraies informations provenant d'une table mysql? si oui Comment? parce que j'essaie depuis des jours et je n'arrive pas. J'aimerai remplacer
    $data = array(

    "0" => array(
    "Janv" => 0,
    "Fevr" => 25,
    "Mars" => 32,
    "Avri" => 1,
    "Mai" => 58,
    "Juin" => 31,
    "Juil" => 82,
    "Août" => 51,
    "Sept" => 54,
    "Oct" => 12,
    "Nov" => 17,
    "Dec" => 14
    ),
    je veux remplacer la partie des entiers en prenant directement les information d'une table
    par ex: "Dec" => $listc['presence'],

  12. @moussahoua : Je ne sais pas sous quelle forme sont les données issues de MySQL mais si elles sont par exemple ainsi :
    $listc = array(

    'presenceJanv' => 0,
    'presenceFeb' => 25,
    'presenceMar' => 32,
    'presenceApr' => 1,
    'presenceMay' => 58,
    'presenceJun' => 31
    'presenceJul' => 82,
    'presenceAug => 51,
    'presenceSep' => 54,
    'presenceOct => 12,
    'presenceNov' => 17,
    'presenceDec' => 14
    );
    alors il faudra mettre dans ton tableau $data :
    $data = array(

    "0" => array(
    "Janv" => '.$listc['presenceJan'].',
    "Fevr" => '.$listc['presenceFeb'].',
    "Mars" => '.$listc['presenceMar'].',
    "Avri" => '.$listc['presenceApr'].',
    "Mai" => '.$listc['presenceMay'].',
    "Juin" => '.$listc['presenceJun'].',
    "Juil" => '.$listc['presenceJul'].',
    "Août" => '.$listc['presenceAug'].',
    "Sept" => '.$listc['presenceSep'].',
    "Oct" => '.$listc['presenceOct'].',
    "Nov" => '.$listc['presenceNov'].',
    "Dec" => '.$listc['presenceDec'].'
    ),

  13. Excusez moi mais je n'arrive pas
    $listc['presence'] c'est le resultat du foreach( $stat $listc) {

    }
    quand je met le tableau entre la fonction foreach ça bug donc je veux savoir si c'est impossible de mettre ce tableau dans un foreach. SVP si vous connaissez une autre possibilité de recuperer les informations dans une table et les afficher dans le graph expliquer moi SVP j'ai vraiment besoin de votre aide je suis bloquer
    Merci d'avance

  14. Salut ! Tout d'abord, merci pour cette bibliothèque :)
    Je rencontre juste un petit souci, je n'arrive pas à faire un pie avec seulement 2 paramètres :

    $data = array(
    '0' => "27",
    '1' => "73"
    );

    echo $G->draw($data,array(
    'type' => 'pie',
    'tooltips' => true,
    'tooltipLegend' => '',
    'stroke' => array(
    '0' => 'blue',
    '1' => 'deeppink'
    ),
    'legends' => array(
    '0' => 'Utilisé',
    '1' => 'Libre'
    ),
    )
    );

    Le but final est d'afficher la quantité d'espace du disque dur utilisé (une part du camembert pour l'espace utilisé, une autre pour l'espace libre) mais il n'est affiché que la première partie en bleu, et la légende ne correspond pas du tout :/

  15. @ProTo :
    Voici ce que j'aurais mis :
    $DD = array( 'Libre' => "27", 'Utilisé' => "73" );
    $op = array(
    'title'=> 'Utilisation du disque',
    'type'=> 'pie',
    'filled' => true,
    'legends'=>array(0=>'Libre',1=>'Utilisé'),
    'tooltips' => true,
    'stroke' => array(0=>'blue',1 => 'deeppink' ),
    'diskLegends' =>array('Libre','Utilisé'),
    'diskLegendsType' => 'pourcent',
    );

    echo $Gr->draw($DD, $op);

    En effet, il doit y avoir un bug car la légende ne s'affiche pas en dessous du camembert.

  16. @moussahoua :
    Fais un print_r($stat) et print_r($listc) et copie/colle moi le résultat.
    Si tu ne sais pas faire, copie moi le code initial de ta page.

  17. @jerrywham, merci beaucoup pour l'exemple, ça m'a l'air déjà plus clair ^^ mais la seconde partie du pie (la partie "Libre") n'est pas en "deeppink" mais une couleur aléatoire à chaque chargement de page :/ et la tooltips m'affiche 2 fois "Libre".

  18. merci pour cette librairie très intéressante .

Écrire un commentaire

*


*

 Se rappeler de moi sur ce site

*
Quelle est la deuxième lettre du mot ulwvs ? :