IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[JpGraph] Explication pour la mise en place d'Histogramme groupé


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Dom-Tom

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 65
    Points : 39
    Points
    39
    Par défaut [JpGraph] Explication pour la mise en place d'Histogramme groupé
    Bonjour à tous,

    Je viens vers vous pour savoir si quelqu'un pourrait m'expliquer comment fonctionne l'histogramme groupé avec Jpgraph.
    J'ai déjà lu le tuto fait Par Eric POMMEREAU(c'est avec ça que j'ai pu faire mes 1er graph)mais quand j'arrive à la partie qui m’intéresse le plus c'est-à-dire l'histogramme groupé je bloque.
    Je ne comprend pas le code où du moins la partie qui permet d'avoir le groupement.

    En espérant que quelqu'un pourras me venir en aide.

    Cordialement,

  2. #2
    Membre actif
    Homme Profil pro
    DSI interne
    Inscrit en
    Juin 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DSI interne
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2011
    Messages : 197
    Points : 290
    Points
    290
    Par défaut
    Bonsoir,

    Tout d'abord qu'elle belle démarche d'avoir lu un tutoriel avant de poser des questions !

    As tu commencé à gratter un peu du code qu'on puisse regarder ? Ou bien qu'est ce qui te bloque ou qu'est ce que tu ne comprends pas ?

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Dom-Tom

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 65
    Points : 39
    Points
    39
    Par défaut
    Merci pour ta réponse.
    Alors ce qui me bloque...ba c'est un peu le tout.
    Avec les exemples de graph qui sont présentés, je me suis débrouillé pour pouvoir les modifiés dans le cadre de mes besoins.

    Pour l'histogramme groupé,j'ai pu écrire ma requête sql sans soucis mais pas comme dans l'exemple.
    Moi j'ai fait une seule requête et dans l'exemple il y en a 2(un pour récupérer les années et l'autre pour récupérer les chiffres d'affaire).
    Ma 1er question est:"Est-ce nécessaire de faire 2 requêtes pour pouvoir faire un histogramme groupé?"

  4. #4
    Membre actif
    Homme Profil pro
    DSI interne
    Inscrit en
    Juin 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DSI interne
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2011
    Messages : 197
    Points : 290
    Points
    290
    Par défaut
    Oui il est nécessaire de faire deux requêtes, car c'est les résultats de la première qui te permettra de faire la deuxième.

    En gros, ta première requête te liste toutes les années (ce qui sera affiché en abscisse).

    Ce qui doit donné quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Array
    (
        [0] => 2010
        [1] => 2011
        [2] => 2012
    )
    Et ensuite tu effectues la requête "$sql_ventes_par_mois" pour chaque année.

    Ce qui te donnes pour 2010 par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT  
    	MONTH( `DTHR_VENTE` ) AS MOIS, 
    	COUNT( `ID` ) AS NOMBRE_VENTE, 
    	SUM( `PRIX` ) AS PRODUIT_VENTE
    FROM VENTES
    WHERE YEAR( `DTHR_VENTE` ) = 2010 
    GROUP BY MOIS
    Mais rien ne t'obliges de le coder comme ça.

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Dom-Tom

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 65
    Points : 39
    Points
    39
    Par défaut
    Okay d'accord.
    J'aurais préféré le codé comme exemple, c'est plus simple.
    Je vais essayer de voir si j'arrive à nouveau à créer le graph qu'il me faut si j'ai un soucis je reviendrais par là.
    Merci pour ton explication ça m'a éclairé.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Dom-Tom

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 65
    Points : 39
    Points
    39
    Par défaut
    Je reviens finalement plus tôt que prévu.^^

    Alors voici la requête que j'utilise pour faire remonter et organiser mes données:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $sql ='SELECT  
    		name AS ANNEE,
    		COUNT(ID) AS NBR_VENTES,
    		COUNT(solvedate) AS resolu
    	FROM glpi_excel
    	WHERE YEAR(date) = 2012 AND MONTH(date) = 6
    	GROUP BY name
    	UNION
    	SELECT name AS ANNEE,NULL,NULL
    	FROM glpi_excel
    	WHERE name NOT IN ( SELECT DISTINCT name
    	FROM glpi_excel
    	WHERE YEAR(date) = 2012 AND MONTH(date) = 6)
    	ORDER BY ANNEE ASC';
    En utilisant un histogramme simple avec un seul count ça passe super.
    Maintenant quand j'utilise les 2 ensembles, ba ils sont superposé.

    Il y a t-il un moyen de décalé un des 2 graphiques sur la gauche ou sur la droite ou comment faire un histogramme groupé avec une requête comme celle que j'ai.

    Cordialement,

  7. #7
    Membre actif
    Homme Profil pro
    DSI interne
    Inscrit en
    Juin 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DSI interne
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2011
    Messages : 197
    Points : 290
    Points
    290
    Par défaut
    Tu pourrais montrer le résultat de ta requête ?
    Et aussi le php que tu utilises pour appeler JPGraph ?

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Dom-Tom

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 65
    Points : 39
    Points
    39
    Par défaut
    Je mets en PJ le résultat.
    Et le code que je vais mettre et ce que j'obtiens quand je fais les 2 graphs sur la même image(ils se superposent).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    <?php
    include ("../jpgraph/jpgraph.php");
    include ("../jpgraph/jpgraph_bar.php");
     
    define('MYSQL_HOST', 'localhost');
    define('MYSQL_USER', 'root');
    define('MYSQL_PASS', '');
    define('MYSQL_DATABASE', 'glpi');
     
    $tableaucategorie = array();
    $tableauouvert = array();
    $tableauresolu = array();
     
     
    // **********************************************
    // Extraction des données dans la base de données
    // *************************************************
     
    $sql ='SELECT  
    		name AS categorie,
    		COUNT(ID) AS ouvert,
    		COUNT(solvedate) AS resolu
    	FROM glpi_excel
    	WHERE YEAR(date) = 2012 AND MONTH(date) = 6
    	GROUP BY name
    	UNION
    	SELECT name AS categorie,NULL,NULL
    	FROM glpi_excel
    	WHERE name NOT IN ( SELECT DISTINCT name
    	FROM glpi_excel
    	WHERE YEAR(date) = 2012 AND MONTH(date) = 6)
    	ORDER BY categorie ASC';
     
     
     
    $mysqlCnx = @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) or die('Pb de connxion mysql');
     
    @mysql_select_db(MYSQL_DATABASE) or die('Pb de sélection de la base');
     
    $mysqlQuery = @mysql_query($sql, $mysqlCnx) or die('Pb de requête');
     
    while ($row = mysql_fetch_array($mysqlQuery,  MYSQL_ASSOC)) {
    	$tableaucategorie[] = $row['categorie'];
    	$tableauouvert[] = $row['ouvert'];
    	$tableauresolu[] = $row['resolu'];
    }
     
    /*
    printf('<pre>%s</pre>', print_r($tableauAnnees,1));
    printf('<pre>%s</pre>', print_r($tableauNombreVentes,1));
    */
     
    // *******************
    // Création du graphique
    // *******************
     
     
    // Construction du conteneur
    // Spécification largeur et hauteur
    $graph = new Graph(1000,500);
     
    // Réprésentation linéaire
    $graph->SetScale("textlin");
     
    // Ajouter une ombre au conteneur
    //$graph->SetShadow();
     
    // Fixer les marges
    $graph->img->SetMargin(60,30,25,140);
     
    // Création du graphique histogramme
    $bplot = new BarPlot($tableauouvert);
    $bplot2 = new BarPlot($tableauresolu);
     
    // Spécification des couleurs des barres
    $bplot->SetFillColor('red');
    $bplot2->SetFillColor('white');
    // Une ombre pour chaque barre
    //$bplot->SetShadow();
     
    // Afficher les valeurs pour chaque barre
    $bplot->value->Show();
    // Fixer l'aspect de la police
    $bplot->value->SetFont(FF_ARIAL,FS_NORMAL,9);
    // Modifier le rendu de chaque valeur
    $bplot->value->SetFormat('%d');
     
    // Ajouter les barres au conteneur
    $graph->Add($bplot);
    $graph->Add($bplot2);
     
    // Le titre
    $graph->title->Set("Graphique 'HISTOGRAMME' : ventes par années");
    $graph->title->SetFont(FF_FONT1,FS_BOLD);
     
    // Titre pour l'axe horizontal(axe x) et vertical (axe y)
    //$graph->xaxis->title->Set("Années");
    //$graph->yaxis->title->Set("Nombre de ventes");
     
    $graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    $graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
     
    // Légende pour l'axe horizontal
    $graph->xaxis->SetTickLabels($tableaucategorie);
    $graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,8); 
    $graph->xaxis->SetLabelAngle(50);
     
     
     
    // Afficher le graphique
    $graph->Stroke();
     
    ?>
    Merci d'avance pour ton aide.

    Cordialement,
    Fichiers attachés Fichiers attachés

  9. #9
    Membre actif
    Homme Profil pro
    DSI interne
    Inscrit en
    Juin 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DSI interne
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2011
    Messages : 197
    Points : 290
    Points
    290
    Par défaut
    Bonsoir (Bonne nuit ?),

    Je me suis penché, et il ne te manquais pas grand chose.
    Je te mets l'intégralité du code commenté, qui fonctionne.
    J'ai volontairement enlevé la partie base de donnée pour simuler le retour de ta requête dans un tableau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    <?php
     
    include ("/jpgraph/jpgraph.php");
    include ("/jpgraph/jpgraph_bar.php");
     
    $tableaucategorie = array();
    $tableauouvert = array();
    $tableauresolu = array();
     
    // **********************************************
    // Données dans ta base de données
    // *************************************************
     
    $donnes = Array( 
    	array(
    		"categorie" => "AS400",
            "ouvert" => 20,
    		"resolu" => 36
    	),
    	array(
    		"categorie" => "Blade",
            "ouvert" => 2,
    		"resolu" => 0
    	),
    	array(
    		"categorie" => "Bureautique",
            "ouvert" => 20,
    		"resolu" => 14
    	),
    	array(
    		"categorie" => "Changement de bureau",
            "ouvert" => 6,
    		"resolu" => 2
    	),
    	array(
    		"categorie" => "EBICS",
            "ouvert" => null,
    		"resolu" => null
    	),
    	array(
    		"categorie" => "GAB",
            "ouvert" => 1,
    		"resolu" => 1
    	),
    	array(
    		"categorie" => "Minitel",
            "ouvert" => null,
    		"resolu" => null
    	),
    	array(
    		"categorie" => "Reseau",
            "ouvert" => 4,
    		"resolu" => 4
    	)
    );
     
     
    foreach($donnes as $row){
    	$tableaucategorie[] = $row['categorie'];
    	$tableauouvert[] = $row['ouvert'];
    	$tableauresolu[] = $row['resolu'];
    }
     
    // *******************
    // Création du graphique
    // *******************
     
    // Construction du conteneur
    // Spécification largeur et hauteur
    $graph = new Graph(1000,500);
     
    // Réprésentation linéaire
    $graph->SetScale("textlin");
     
    // Ajouter une ombre au conteneur
    //$graph->SetShadow();
     
    // Fixer les marges
    $graph->img->SetMargin(60,30,25,140);
     
    // Chaque histogramme sera placé dans un tableau commun 
    $aGroupBarPlot = array();
    //Histo 1
    $bplot = new BarPlot($tableauouvert);
    $aGroupBarPlot[] = $bplot;
    //Histo 2
    $bplot2 = new BarPlot($tableauresolu);
    $aGroupBarPlot[] = $bplot2; 
     
    //Objet qui regroupe les histogrammes
    $gbarplot = new GroupBarPlot($aGroupBarPlot);
     
    // Spécification des couleurs des barres
    $bplot->SetFillColor('red');
    $bplot2->SetFillColor('white');
     
    // Afficher les valeurs pour chaque barre
    $bplot->value->Show();
    // Fixer l'aspect de la police
    $bplot->value->SetFont(FF_ARIAL,FS_NORMAL,9);
    // Modifier le rendu de chaque valeur
    $bplot->value->SetFormat('%d');
     
    // Le titre
    $graph->title->Set("Graphique 'HISTOGRAMME' : ventes par années");
    $graph->title->SetFont(FF_FONT1,FS_BOLD);
     
    // Titre pour l'axe horizontal(axe x) et vertical (axe y)
    //$graph->xaxis->title->Set("Années");
    //$graph->yaxis->title->Set("Nombre de ventes");
     
    $graph->yaxis->title->SetFont(FF_FONT1,FS_BOLD);
    $graph->xaxis->title->SetFont(FF_FONT1,FS_BOLD);
     
    // Légende pour l'axe horizontal
    $graph->xaxis->SetTickLabels($tableaucategorie);
    $graph->xaxis->SetFont(FF_ARIAL,FS_NORMAL,8); 
    $graph->xaxis->SetLabelAngle(50);
     
    // Ajouter au graphique les 2 histos
    $graph->Add($gbarplot);
     
    // Afficher
    $graph->Stroke();
     
    ?>
    Bien à toi

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2011
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Dom-Tom

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2011
    Messages : 65
    Points : 39
    Points
    39
    Par défaut
    Merci énormément MinDBuSteR.

    Maintenant j'ai compris, c'est en faite le $aGroupBarPlot = array(); qui permet de faire le tableau pour mettre les 2 graphiques !!!!!!

    Merci encore j'ai pu finir mon graph, il me reste plus que les petits détails visuels.^^

    Cordialement,

  11. #11
    Membre actif
    Homme Profil pro
    DSI interne
    Inscrit en
    Juin 2011
    Messages
    197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : DSI interne
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2011
    Messages : 197
    Points : 290
    Points
    290
    Par défaut
    De rien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Aide pour la mise en place dun réseau
    Par marilou86 dans le forum Réseau
    Réponses: 0
    Dernier message: 17/11/2007, 22h40
  2. Aide pour la mise en place d'un index fulltext
    Par bluecurve dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 13/11/2007, 10h47
  3. Réponses: 4
    Dernier message: 19/09/2007, 10h51
  4. [Conception] Aide pour une mise en place
    Par Olivier636 dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 11/03/2006, 16h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo