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] Information multiple camembert


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre confirmé
    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
    Par défaut [JpGraph] Information multiple camembert
    Bonjour à tous,

    Je voudrais savoir si c'est possible de pouvoir mettre plusieurs valeurs dans le SetFormat dans mon camembert.

    J'aurais aimé avoir, le nombre total(ça je l'ai déjà) avec le pourcentage et le nom de catégorie.

    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
    <?php
    include ("../jpGraph/jpgraph.php");
    include ("../jpGraph/jpgraph_pie.php");
     
     
    define('MYSQL_HOST', 'localhost');
    define('MYSQL_USER', 'root');
    define('MYSQL_PASS', '');
    define('MYSQL_DATABASE', 'glpi');
     
    // Tableaux de données destinées à JpGraph
    $tableaucategorie = array();
    $tableauouvert = array();
     
    			$sql =
    		'SELECT  
    		name AS categorie,
    		COUNT(ID) AS ouvert  
    	FROM `glpi_excel`
    	WHERE YEAR(date) = 2012 AND MONTH(date) = 6
    	GROUP BY name';
     
     
    // Connexion à la BDD
    $mysqlCnx = @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) or die('Pb de connxion mysql');
     
    // Sélection de la base de données
    @mysql_select_db(MYSQL_DATABASE) or die('Pb de sélection de la base');
     
    // Requête
    $mysqlQuery = @mysql_query($sql, $mysqlCnx) or die('Pb de requête');
     
    // Fetch sur chaque enregistrement
    while ($row = mysql_fetch_array($mysqlQuery,  MYSQL_ASSOC)) {
    	// Alimentation des tableaux de données
    	$tableaucategorie[] = $row['categorie'];
    	$tableauouvert[] = $row['ouvert'];
     
    }
     
    // ********************************************************************
    // PARTIE : Création du graphique 
    // ********************************************************************
     
    // On spécifie la largeur et la hauteur du graphique conteneur 
    $graph = new PieGraph(800,600);
     
    // Titre du graphique
    $graph->title->Set("Nombre de tickets ouverts");
     
    // Créer un graphique secteur (classe PiePlot)
    $oPie = new PiePlot($tableauouvert);
     
    // Légendes qui accompagnent chaque secteur, ici chaque année
    $oPie->SetLegends($tableaucategorie);
     
    // position du graphique (légèrement à droite)
    $oPie->SetCenter(0.3); 
     
    $oPie->SetValueType(PIE_VALUE_ABS);
     
    // Format des valeurs de type entier
    $oPie->value->SetFormat('%d');
     
     
    // Ajouter au graphique le graphique secteur
    $graph->Add($oPie);
     
    // Provoquer l'affichage (renvoie directement l'image au navigateur)
    $graph->Stroke();
     
     
     
    ?>

  2. #2
    Membre émérite Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 601
    Par défaut
    Bonjour.
    tu peux utiliser SetFormatCallback(). Un exemple t-est donné sur la FAQ de jpGraph à la réponse à la question 5.13

  3. #3
    Membre confirmé
    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
    Par défaut
    Citation Envoyé par ypcman Voir le message
    Bonjour.
    tu peux utiliser SetFormatCallback(). Un exemple t-est donné sur la FAQ de jpGraph à la réponse à la question 5.13
    Désolé avec beaucoup de retard...
    Alors j'ai pu mettre en place la fonction que tu m'as donné sa fonctionne presque comme je le veux.
    J'ai Nom de groupe suivit du nombre en pourcentage.
    Mon soucis a présent c'est que je souhaite avoir un 3ème chiffre qui indique le chiffre total.
    Par exemple: Bureau,30%,90 pour le moment j'ai pu avoir Bureau,30%,30
    J'espère que j'ai été assez compréhensible.

    Cordialement,

  4. #4
    Membre émérite Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 601
    Par défaut
    Tu peux rentrer les trois valeurs que tu veux afficher comme arguments de ta fonction xyCallback.
    Tu peux poster le code de ta fonction xyCallback ?

  5. #5
    Membre confirmé
    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
    Par défaut
    Citation Envoyé par ypcman Voir le message
    Tu peux rentrer les trois valeurs que tu veux afficher comme arguments de ta fonction xyCallback.
    Tu peux poster le code de ta fonction xyCallback ?
    Voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function xyCallback($yval) {
     global $tableaucategorie, $idx;
     return ''.$tableaucategorie[$idx++].", $yval, $yval%";
    }
    Mon soucis s'est que quand je veux que la valeur soit en pourcentage ou qu'elle affiche la valeur totale j'utilise le code SetValueType(PIE_VALUE_ADJPER) ou SetLabelType(PIE_VALUE_ABS)

    Mais ça me met les 2 valeurs en pourcentage ou en valeur simple.

    Cordialement,

  6. #6
    Membre émérite Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 601
    Par défaut
    Le plus simple consiste, je pense, à modifier la fonction xyCallbackpour qu'elle prenne deux arguments en entrée : la valeur en pourcentage et la valeur brute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function xyCallback($yval_pourcentage,$yval_brute) {
     global $tableaucategorie, $idx;
     return ''.$tableaucategorie[$idx++].", $yval_pourcentage.%, $yval_brute";
    }
    Code approximatif non testé mais c'est l'esprit ...
    il faut bien sur modifier en conséquence ton code à l'endroit ou tu appelles cette fonction.

  7. #7
    Membre confirmé
    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
    Par défaut
    Citation Envoyé par ypcman Voir le message
    Le plus simple consiste, je pense, à modifier la fonction xyCallbackpour qu'elle prenne deux arguments en entrée : la valeur en pourcentage et la valeur brute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function xyCallback($yval_pourcentage,$yval_brute) {
     global $tableaucategorie, $idx;
     return ''.$tableaucategorie[$idx++].", $yval_pourcentage.%, $yval_brute";
    }
    Code approximatif non testé mais c'est l'esprit ...
    il faut bien sur modifier en conséquence ton code à l'endroit ou tu appelles cette fonction.
    Oui justement c'est sa que je pensais faire mais petit problème le graph ne s'affiche pas.

    Je met le code si ça peut t'aider.

    De mon côté j'ai cherché je ne vois pas d'où peut provenir l'erreur.
    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
    <?php
    include ("../jpGraph/jpgraph.php");
    include ("../jpGraph/jpgraph_pie.php");
     
     
    define('MYSQL_HOST', 'localhost');
    define('MYSQL_USER', 'root');
    define('MYSQL_PASS', '');
    define('MYSQL_DATABASE', 'glpi');
     
    // Tableaux de données destinées à JpGraph
    $tableaucategorie = array();
    $tableauouvert = array();
     
    			$sql =
    		'SELECT  
    		name AS categorie,
    		COUNT(ID) AS ouvert,
    		COUNT(ID) AS ouvert2
    	FROM `glpi_excel`
    	WHERE YEAR(date) = 2012 AND MONTH(date) = 6
    	GROUP BY name';
     
     
    // Connexion à la BDD
    $mysqlCnx = @mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) or die('Pb de connxion mysql');
     
    // Sélection de la base de données
    @mysql_select_db(MYSQL_DATABASE) or die('Pb de sélection de la base');
     
    // Requête
    $mysqlQuery = @mysql_query($sql, $mysqlCnx) or die('Pb de requête');
     
    // Fetch sur chaque enregistrement
    while ($row = mysql_fetch_array($mysqlQuery,  MYSQL_ASSOC)) {
    	// Alimentation des tableaux de données
    	$tableaucategorie[] = $row['categorie'];
    	$tableauouvert[] = $row['ouvert'];
    	$tableauouvert2[] = $row['ouvert2'];
    	$idx=0;
    }
     
    // ********************************************************************
    // PARTIE : Création du graphique 
    // ********************************************************************
     
    function xyCallback($yval,$yval2) {
     global $tableaucategorie, $idx;
     return ''.$tableaucategorie[$idx++].", $yval, $yval2%";
    }
     
    // On spécifie la largeur et la hauteur du graphique conteneur 
    $graph = new PieGraph(800,600);
    $graph->SetScale("intlin");
     
    // Titre du graphique
    $graph->title->Set("Nombre de tickets ouverts");
     
    // Créer un graphique secteur (classe PiePlot)
    $oPie = new PiePlot($tableauouvert);
     
    // Légendes qui accompagnent chaque secteur, ici chaque année
    //$oPie->SetLegends($tableaucategorie);
     
     
    // position du graphique (légèrement à droite)
    $oPie->SetCenter(0.4); 
    $oPie->value->SetFormatCallback('xyCallback');
    $oPie->SetValueType(PIE_VALUE_ADJPER);
    //$oPie->SetLabelType(PIE_VALUE_ABS); 
    // Format des valeurs de type entier
    //$lbl = array("'.$tableaucategorie.'.%d");
    $oPie->value->Show();
    //$oPie->value->SetFormat('%d%%');
    //$oPie->SetLabels($tableaucategorie);
     
    // Ajouter au graphique le graphique secteur
    $graph->Add($oPie);
     
    // Provoquer l'affichage (renvoie directement l'image au navigateur)
    $graph->Stroke();
     
     
     
    ?>

  8. #8
    Membre émérite Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 601
    Par défaut
    Désolé mais j'ai été fort pris ces deux derniers jours ...
    A y bien regardé, mon idée initiale n'était pas la bonne car l'appel à la fonction xyCallback() se fait sans argument ... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $oPie->value->SetFormatCallback('xyCallback');
    Pour mettre plusieurs données, il faut quelles soient définies en global, ce qui était d'ailleurs précisé dans la FAQ en GB.
    Il faut mettre quelque part après le remplissage de $tableauouvert :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $total_val=array_sum($tableauouvert);
    et rectifier en valeur absolue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $oPie->SetValueType(PIE_VALUE_ABS);
    Le code de la fonction doit ressembler à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    function xyCallback($yval) {
     global $tableaucategorie, $tableauouvert,$total_val, $idx;
     $yval_pourcent=round(10000*$yval/$total_val)/100;
      return ''.$tableaucategorie[$idx++]."\n".$yval." -> ".$yval_pourcent." %";
    }

    En utilisant des valeurs bidons :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $tableaucategorie[]="eau";
    $tableaucategorie[]="vin";
    $tableaucategorie[]="vodka";
    $tableaucategorie[]="sirop";
    $tableaucategorie[]="lait";
     
    $tableauouvert[] = '10';
    $tableauouvert[] = '12';
    $tableauouvert[] = '5';
    $tableauouvert[] = '2';
    $tableauouvert[] = '16';
    $total_val=array_sum($tableauouvert);
    $idx=0;
    Ça donne chez moi :


    J'espère que cela te permettra de finaliser ton camembert

    Yves
    Images attachées Images attachées  

  9. #9
    Membre confirmé
    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
    Par défaut
    Merci pour ta réponse et effectivement,j'ai bien pu avancé désolé pour le retard pour voir la réponse.

    Donc j'ai pu essayé ton code et c'est presque parfait mon seul soucis s'est que le nom de catégorie ne se met pas près de la bonne valeur par exemple j'ai:
    Coupure réseau 93 ->31.74 alors que normalement sa aurait du être Impression...
    J'ai vérifié ma BDD au cas ou et c'est OK.
    Donc je pense que ça vient du code PHP mais en regardant je ne vois rien de particulier.


    Cordialement,

  10. #10
    Membre émérite Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 601
    Par défaut
    Peux-tu faire un var_dump des deux tableaux $tableaucategorie et $tableauouvert juste avant la partie création du graphique et poster le résultat ?

  11. #11
    Membre confirmé
    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
    Par défaut
    Désolé pour le retard .
    Voici les 2 var_dump

    var_dump tableaucategorie
    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
    array (size=18)
      0 => string 'AS400' (length=5)
      1 => string 'Blade' (length=5)
      2 => string 'Bureautique' (length=11)
      3 => string 'Changement de bureau' (length=20)
      4 => string 'Changement de poste de travail' (length=30)
      5 => string 'Coupure Electrique' (length=18)
      6 => string 'Coupure reseau' (length=14)
      7 => string 'Equant' (length=6)
      8 => string 'Exploitation' (length=12)
      9 => string 'GAB' (length=3)
      10 => string 'Idom' (length=4)
      11 => string 'Impression' (length=10)
      12 => string 'Messagerie' (length=10)
      13 => string 'Mot de passe' (length=12)
      14 => string 'Nouvel utilisateur' (length=18)
      15 => string 'Reseau' (length=6)
      16 => string 'Session Citrix' (length=14)
      17 => string 'VBank' (length=5)
    var_dump tableauouvert
    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
    array (size=18)
      0 => string '37' (length=2)
      1 => string '2' (length=1)
      2 => string '20' (length=2)
      3 => string '2' (length=1)
      4 => string '1' (length=1)
      5 => string '2' (length=1)
      6 => string '1' (length=1)
      7 => string '10' (length=2)
      8 => string '3' (length=1)
      9 => string '1' (length=1)
      10 => string '4' (length=1)
      11 => string '162' (length=3)
      12 => string '51' (length=2)
      13 => string '5' (length=1)
      14 => string '5' (length=1)
      15 => string '4' (length=1)
      16 => string '48' (length=2)
      17 => string '4' (length=1)
    En espérant que ça puisse t'aider.

    Cordialement,

  12. #12
    Membre émérite Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    601
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 601
    Par défaut
    Pour une raison que je ne suis pas aller vérifier dans le code de php, le camembert se remplit en descendant les indices du tableau de valeurs fourni.
    Bref, avec une petite manip sur les indices, ça devrait fonctionner. Tu remplaces la fonction xyCallback existante par le bout de code suivant, sans oublier d'inclure la variable globale qui donne la taille du tableau et ça devrait être bon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $size_tableauouvert=count($tableauouvert);
    function xyCallback($yval) {
     global $tableaucategorie, $total_val, $idx,$size_tableauouvert;
     $yval_pourcent=round(10000*$yval/$total_val)/100;
     $indice=$size_tableauouvert -1 - $idx++;
      return ''.$tableaucategorie[$indice]."\n".$yval." -> ".$yval_pourcent." %";
    }
    Pour moi, ça donne ça :
    Images attachées Images attachées  

  13. #13
    Membre confirmé
    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
    Par défaut
    Super ça passe nikel !!!!
    J’ai plus qu'à rendre les intitulées plus lisible et s'est OK.
    Encore une fois merci.

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

Discussions similaires

  1. [PrestaShop] Récupération d'informations multiples dans un panier
    Par hldesign dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 24/07/2013, 15h50
  2. Réponses: 19
    Dernier message: 21/03/2012, 16h17
  3. [JpGraph] Couleur portions Camembert JPGRAPH
    Par Clément FREDON dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 30/01/2011, 17h36
  4. [JpGraph] rendre mon camembert plus petit afin de voir mes légendes
    Par vandeyy dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 07/02/2008, 11h27
  5. informations multiples d'une meme table
    Par *kilik* dans le forum Requêtes
    Réponses: 13
    Dernier message: 20/12/2006, 23h25

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