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] Histogrammes Cumulés


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2016
    Messages : 14
    Points : 10
    Points
    10
    Par défaut [JpGraph] Histogrammes Cumulés
    Bonjour à tous,

    Je dois créer un logiciel qui enregistre des donnée dans une BDD et une interface web graphique qui interprète.
    Je possède des lignes de fabrications qui sont constituée de plusieurs Station.
    Ainsi deux lignes différentes peuvent chacune avoir une station de même nom ou numéro.

    Dans la BDD est stocker le nombre d'arrêt en indiquant le numéro de ligne et le numéro de station.

    Voici ma BDD test :
    Nom : Capture.PNG
Affichages : 917
Taille : 43,1 Ko

    On peut donc voir que ma ligne 1 à eu 2 arrêts qui sont tous deux sur la station 1
    Ma ligne 2 à eu 5 arrêts dont 4 en Station 1 et 1 en Station 2

    Je voudrais donc créer un histogramme avec en abscisse les lignes et en cumulé les stations.

    Genre comme ça :
    Nom : Graph Arret LT ST.PNG
Affichages : 1678
Taille : 19,8 Ko

    Pour cela j'ai fais une requête comptant les arrêts avec ligne et station identique :

    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
    $REQ_Total_Arrets_Station = $bdd->query('SELECT 
    					COUNT(Arret.IDArret) AS Comptage_1,	
    					Station.nomStation AS nomStation,	
    					Ligne.NomLigne AS NomLigne
    				FROM 
    					Ligne,	
    					Arret,	
    					Station
    				WHERE 
    					Station.IDStation = Arret.IDStation
    					AND		Ligne.IDLigne = Arret.IDLigne
    				GROUP BY 
    					Arret.IDStation,
    					Arret.IDLigne
    				ORDER BY 
    					Comptage_1 DESC');
    L'idée serrait donc de créer un graphique bar par station et les cumulé sur les lignes.
    Mais je ne vois absolument pas comment.
    Voici la façon dont je récupère les data de ma requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $tab_Station = array();
    $tab_ligne = array();
    $tab_nbArrets = array();
     
    while ($data = $REQ_Total_Arrets_Station->fetch())
    {
    	$tab_ligne[] = $data['NomLigne'];
    	$tab_nbArrets[] = $data['Comptage_1'];
    	$tab_Station[] = $data['nomStation']; 
    }
    Le problème est que seul un des tableau contient des valeurs, il ne m'est donc pas possible de faire plusieurs graph.

    Avez-vous une idée de ce qui cloche dans mon code ou dans ma tête ?

    Salutations,

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Le problème est que seul un des tableau contient des valeurs
    Qu'est ce que tu veux dire par la ?
    Un seul des $tab_ contient des données ? si oui, ça serait bien de nous dire lequel, et ce que retourne ta requête quand tu l'executes dans phpmyadmin.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2016
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Qu'est ce que tu veux dire par la ?
    Un seul des $tab_ contient des données ? si oui, ça serait bien de nous dire lequel, et ce que retourne ta requête quand tu l'executes dans phpmyadmin.
    Les variables tab_ligne et tab_station prennent les noms
    La variable tab_nbArrets prend le comptage.

    Lors d'une éxécution de ma requête j'obtiens :

    Ligne 1 , Station 1 : 2
    Ligne 2, Station 1 : 4
    Ligne 2 , Station 2 : 1
    Ligne 3 , Station 3 : 1

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Donc tu as donc toutes les données ?
    Quel est ton problème ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2016
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Donc tu as donc toutes les données ?
    Quel est ton problème ?
    Bonjour,

    Me requête fait bien le tri comme prévu.
    Mon problème est d'exploiter ces donnée pour en faire un graph cumulé comme indiqué dans mon premier post.

    La technique est de créer un graph bar par station, mais je ne vois pas comment séparer mes données.

    Salutations,

  6. #6
    Membre éclairé Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    597
    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 : 597
    Points : 886
    Points
    886
    Par défaut
    Bonjour.
    Tu trouveras ici http://jpgraph.net/download/manuals/...l/ch15s02.html la documentation officielle sur les graphes à barres, dont des exemples de code source. Tu peux t'en inspirer puis revenir vers nous si ton code te pose encore problème
    Yves
    Participez vous aussi !
    Message utile
    Discussion résolue

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    J'ajoute http://eric-pommereau.developpez.com...age=graphiques (2ème résultat sur google)
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2016
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    J'avais déjà vu les tutos et j'ai bien compris qu'il fallait faire plusieurs histogrammes.

    J'ai donc forcé mes valeurs à la main ce qui me donne un graph cumulé à peu prêt comme je le veux :

    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
     
    <?php
     
    include ("requetes.php");
    include ("jpgraph/src/jpgraph.php");
    include ("jpgraph/src/jpgraph_bar.php");
     
     
    $tab_ligne = array();
    $tab_Station1 = array(4,2,0);
    $tab_Station2 = array(1,0,0);
    $tab_Station3 = array(0,0,1);
     
    while ($data = $REQ_Total_Arrets_Station->fetch())
    {
    	$tab_ligne[] = $data['NomLigne'];
    }
     
     
    // **********************
    // Création du graphique 
    // **********************
     
    $graph = new Graph(640,480,"auto");    
    $graph->SetScale("textlin");
    $graph->SetShadow();
    $graph->img->SetMargin(60,40,50,40);
    $graph->SetMarginColor('#CCCCFF');
    $graph->title->Set("Nombre d'arrets lignes MGG");
    $graph->title->SetMargin(20);
    $graph->title->SetFont(FF_COMIC,FS_BOLD,12);
     
     
    	// Créer les ensembles d'histogrammes
    $station1 = new BarPlot($tab_Station1);
    $station1->SetFillGradient('blue', '#9090FF', GRAD_VER);
    $station1->SetLegend('station1');
    $station1->value->Show();
    $station1->value->SetFont(FF_ARIAL, FS_NORMAL,7);
    $station1->value->SetColor('black');
    $station1->value->SetFormat('%d');
     
    $station2 = new BarPlot($tab_Station2);
    $station2->SetFillGradient('green', '#9090FF', GRAD_VER);
    $station2->SetLegend('station2');
    $station2->value->Show();
    $station2->value->SetFont(FF_ARIAL, FS_NORMAL,7);
    $station2->value->SetColor('black');
    $station2->value->SetFormat('%d');
     
    $station3 = new BarPlot($tab_Station3);
    $station3->SetFillGradient('red', '#9090FF', GRAD_VER);
    $station3->SetLegend('station3');
    $station3->value->Show();
    $station3->value->SetFont(FF_ARIAL, FS_NORMAL,7);
    $station3->value->SetColor('black');
    $station3->value->SetFormat('%d');
     
     
    // Créer l'ensemble d'histogrammes accumulés	
    $gbplot = new AccBarPlot(array($station1,$station2,$station3));
     
    // Afficher les valeurs de chaque histogramme groupé
    $gbplot->value->Show();
    $gbplot->value->SetFont(FF_COMIC,FS_NORMAL,8);
    $gbplot->value->SetFormat('%d');
     
    // Position de la légende
    $graph->legend->Pos(0.12,0.12,"right","top");
     
    // Ajouter l'ensemble accumulé
    $graph->Add($gbplot);
     
    // Paramétrer les axes X et Y
    $graph->yaxis->title->Set("Nombre arrets");
    $graph->yaxis->title->SetMargin(20);
    $graph->yaxis->title->SetFont(FF_COMIC,FS_BOLD);
     
    $graph->xaxis->title->Set("Ligne");
    $graph->xaxis->SetTickLabels($tab_ligne);
    $graph->xaxis->title->SetMargin(4);
    $graph->xaxis->title->SetFont(FF_COMIC,FS_BOLD);
     
    // Afficher l'image générée
    $graph->StrokeCSIM();
     
    ?>
    Ce qui nous donne :
    Nom : Capture.PNG
Affichages : 925
Taille : 13,1 Ko

    Là le problème du graph est que la ligne MGG4 de droite devrait s'appeler autrement. et que les couleurs ne sont pas bien gérées.
    Mais dans l'idée de graph c'est ça.
    Je veux donc réussir à collecter mes données de cette façon.

  9. #9
    Membre éclairé Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    597
    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 : 597
    Points : 886
    Points
    886
    Par défaut
    Peux tu exécuter la requête
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT COUNT(Arret.IDArret) AS Comptage_1,	Station.nomStation AS nomStation,	Ligne.NomLigne AS NomLigne
    FROM 
    Ligne,Arret,Station
    WHERE 
    Station.IDStation = Arret.IDStation
    AND Ligne.IDLigne = Arret.IDLigne
    GROUP BY 
    Arret.IDStation,
    Arret.IDLigne
    ORDER BY 
    Comptage_1 DESC
    dans phpMyAdmin et nous retourner le résultat ?
    Participez vous aussi !
    Message utile
    Discussion résolue

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2016
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Bonjour ,

    Voici le résultat de la requête :
    Nom : Capture.PNG
Affichages : 833
Taille : 9,3 Ko

    En ce qui concerne le graphique j'ai réussi à avoir exactement ce que je veux en forçant les valeurs de mon tableau comme ceci :
    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
     
    <?php
     
    include ("requetes.php");
    include ("jpgraph/src/jpgraph.php");
    include ("jpgraph/src/jpgraph_bar.php");
     
     
     
    $tab_ligne = array();
    $tab_Station1 = array(4,2,0);
    $tab_Station2 = array(1,0,0);
    $tab_Station3 = array(0,0,1);
    $presenceLigne = 0;
     
     
    while ($data = $REQ_Total_Arrets_Station->fetch())
    {
    	foreach ($tab_ligne as $key) 
    	{
    		if ($key == $data['NomLigne'] ) 
    		{
    			$presenceLigne = 1;
    		}
    	}
    	if ($presenceLigne == 0 ) 
    	{
    		$tab_ligne[] = $data['NomLigne'];	
    	}
     
    	$presenceLigne = 0;
     
    }$REQ_Total_Arrets_Station->closeCursor();
     
     
    // **********************
    // Création du graphique 
    // **********************
     
    $graph = new Graph(640,480,"auto");    
    $graph->SetScale("textlin");
    $graph->SetShadow();
    $graph->img->SetMargin(60,40,50,40);
    $graph->SetMarginColor('#CCCCFF');
    $graph->title->Set("Nombre d'arrets lignes MGG");
    $graph->title->SetMargin(20);
    $graph->title->SetFont(FF_COMIC,FS_BOLD,12);
     
     
    	// Créer les ensembles d'histogrammes
    $station1 = new BarPlot($tab_Station1);
    $station1->SetFillGradient('blue', '#9090FF', GRAD_VER);
    $station1->SetLegend('Station 155');
    $station1->value->Show();
    $station1->value->SetFont(FF_ARIAL, FS_NORMAL,7);
    $station1->value->SetColor('black');
    $station1->value->SetFormat('%d');
     
     
    $station2 = new BarPlot($tab_Station2);
    $station2->SetFillGradient('green', '#9090FF', GRAD_VER);
    $station2->SetLegend('Station 160');
    $station2->value->Show();
    $station2->value->SetFont(FF_ARIAL, FS_NORMAL,7);
    $station2->value->SetColor('black');
    $station2->value->SetFormat('%d');
     
    $station3 = new BarPlot($tab_Station3);
    $station3->SetFillGradient('red', '#9090FF', GRAD_VER);
    $station3->SetLegend('Station 157');
    $station3->value->Show();
    $station3->value->SetFont(FF_ARIAL, FS_NORMAL,7);
    $station3->value->SetColor('black');
    $station3->value->SetFormat('%d');
     
     
     
    // Créer l'ensemble d'histogrammes accumulés	
    $gbplot = new AccBarPlot(array($station1,$station2,$station3));
     
    // Afficher les valeurs de chaque histogramme groupé
    $gbplot->value->Show();
    $gbplot->value->SetFont(FF_COMIC,FS_NORMAL,8);
    $gbplot->value->SetFormat('%d');
     
     
    // Position de la légende
    $graph->legend->Pos(0.12,0.12,"right","top");
     
    // Ajouter l'ensemble accumulé
    $graph->Add($gbplot);
     
    // Paramétrer les axes X et Y
    $graph->yaxis->title->Set("Nombre arrets");
    $graph->yaxis->title->SetMargin(20);
    $graph->yaxis->title->SetFont(FF_COMIC,FS_BOLD);
     
    $graph->xaxis->title->Set("Ligne");
    $graph->xaxis->SetTickLabels($tab_ligne);
    $graph->xaxis->title->SetMargin(4);
    $graph->xaxis->title->SetFont(FF_COMIC,FS_BOLD);
     
    // Afficher l'image générée
    $graph->StrokeCSIM();
     
    ?>
    ce qui donne :
    Nom : graph.PNG
Affichages : 974
Taille : 13,4 Ko

    La vraie question est : comment puis-je remplir mes tableaux en automatique via ma requête.
    Sur ce test je n'ai mis que 3 stations, mais j'en ai entre 20 et 30 sur le terrain.
    Je pensais à créer un tableau station par station et remplir selon l'ID mais cela me parait assez énorme.

    Cordialement,

  11. #11
    Membre éclairé Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    597
    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 : 597
    Points : 886
    Points
    886
    Par défaut
    Tu commences par récupérer les valeurs des stations dans un tableau de tableaux $tab_Station.
    Puis tu crées un tableau de stations
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     $station=array ();
    foreach ( $tab_Station AS $Station_courante)
        {
        $station[] = new BarPlot($Station_courante);
        $station[]->SetFillGradient('blue', '#9090FF', GRAD_VER);
        $station[]->SetLegend('Station 155');
        $station[]->value->Show();
        $station[]->value->SetFont(FF_ARIAL, FS_NORMAL,7);
        $station[]->value->SetColor('black');
        $station[]->value->SetFormat('%d');
        }
    Tu termines de modifier ton code selon la même logique.
    Syntaxe du code non vérifiée mais c'est l'idée
    Participez vous aussi !
    Message utile
    Discussion résolue

  12. #12
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2016
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Bonjour

    Merci pour cette réponse j'ai saisi l'idée.

    J'ai donc généré ce genre de code mais le problème est maintenant qu'il faut le même nombre de data dans mes tableaux.

    Existe-t-il un moyen de fixer des tailles pour mes tableaux ?


    Salutations,

  13. #13
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2016
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2016
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    J'ai trouvé la solution grâce à vos idées.
    Merci à vous.

    Cordialement,

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

Discussions similaires

  1. histogramme cumulé d'une image
    Par arsonlupo dans le forum Images
    Réponses: 1
    Dernier message: 02/06/2009, 20h01
  2. [hist] Problème histogramme cumulé
    Par Flaherty Mc Coillean dans le forum MATLAB
    Réponses: 1
    Dernier message: 31/03/2009, 12h11
  3. [JpGraph] histogrammes groupés
    Par fey dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 11/09/2008, 18h09
  4. [matlab sans toolbox] Histogramme cumulé
    Par Axiome dans le forum MATLAB
    Réponses: 4
    Dernier message: 03/03/2008, 17h26
  5. Réponses: 2
    Dernier message: 30/11/2007, 17h57

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