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] Problème avec l'axe des abscisses ?


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre actif

    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 472
    Points : 262
    Points
    262
    Par défaut [JpGraph] Problème avec l'axe des abscisses ?
    Bonjour,

    J'utilise JPGraph pour tracer des courbes de températures relevées à une date et heure précise. Je souhaite avoir en X les heures (sur les dernières 24 heures) et en Y les températures relevées.

    Voici ce que j'ai :


    Comment dois-je faire pour avoir 24 heures et mes données placées dedans ?
    Actuellement, il va jusqu'à 39 parce que j'ai 39 valeurs en 24 heures.

    J'espère avoir été assez clair...

    Voici mon code :
    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
     
    <?php
    	include('jpgraph.php');
    	include('jpgraph_line.php');
    	include('ouverture.inc.php');
     
    	$sql = "SELECT MyDate,MyTemperature FROM metar WHERE MyDate BETWEEN '".date("Y-m-d H:i:s",time()-3600*24)."' AND '".date("Y-m-d H:i:s")."'";
    	$req = mysql_query($sql);
    	while($res = mysql_fetch_array($req))
    	{
    		$ydata[] = $res['MyTemperature'];
    	}	
    	include('fermeture.inc.php');
    	for($i=1; $i<=24; $i++)
    	{
    		$datax[] = date("H",time()+(3600*$i));
    	}
     
    	$graph = new Graph(600,250,"auto");	
    	$graph->SetScale("textlin");
    	$graph->title->Set('Lille (LFQQ) - Température (°C)');
    	$graph->xaxis->SetTickLabels($datax);
     
    	$lineplot = new LinePlot($ydata);
    	$lineplot->SetColor("blue");
     
    	$graph->Add($lineplot);
    	$graph->Stroke();
    ?>
    Merci d'avance,
    Mathieu

  2. #2
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    c'est a toi de traiter tes données pour qu'elles apparaissent sous la forme que tu as envie! JPGraph n'interprete pas tes données! il te faut par exemple faire un moyennage sur chaque heure, pour ne garder que 24 valeurs qui apres sur ton echelle pourraient representer ta journée...

    je ne sais pas si j'ai été clair, mais avec un graphique il faut toujours se dire que l'on peut lui faire dire ce dont on a envie

  3. #3
    Membre actif

    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 472
    Points : 262
    Points
    262
    Par défaut
    Bonjour,

    En fait, je souhaite avoir 24 heures sur l'axe des abscisses de mon graphique allant de l'heure actuelle à l'heure actuelle + 24 heures.

    Voici un exemple de ce que je voudrais réussir à avoir :


    Il doit bien avoir des fonctions dans JOGraph qui permettent d'arriver à ça non ?

    Merci,
    Mathieu

  4. #4
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    deja je pense que tu voulais dire de l'heure actuelle a l'heure actuelle - 24h

    ensuite pour arriver a cela , comme je te l'ai dit, a toi de traiter tes données en php genre tu recuperes l'heure actuelle avec la fonction date() ou un truc du genre puis tu fait le traitement genre un tableau recupere l'heure actuelle et remplit le tableau de facon a avoir toutes les heures...

    et apres avec un truc du genre tu dois pouvoir te debrouiller:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $graph->xaxis->SetTickLabels($tableau);

    sinon pour les valeurs entre 2 valeurs j'me suis pas trop penché dessus mais ca doit etre faisable en lisant la doc jpgraph (dans ton repertoire d'install jpgraph\docs\html\index.html)

  5. #5
    Membre actif

    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 472
    Points : 262
    Points
    262
    Par défaut
    Bonjour,

    Oui, c'est en effet "heure actuelle - 24h" ^^

    En fait, je voudrais savoir quand on a un point X1 qui a pour valeur (18/07/2006 10:25:01;28) comment le placer correctement sur l'axe des abscisses que l'on aura gradué en heures.

    Je n'ai pas vu d'exemples avec des heures en abscisse pour JPGraph.

    Il n'y a personne sur le forum qui s'est déjà penché sur le problème ?

    Merci,
    Mathieu

  6. #6
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    Et bien si ton point X1 est ton heure actuelle tu effectue un traitement pour obtenir les 24hh precedente et tu les classes dans l'ordre dans un tableau puis tu utilises la methode que j'ai citée


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	for ($i = 0; $i <24; $i++)
    	{
     
    		$hour[24-$i] = date("t", mktime ( 0 ,0, date("h") - $i,date("M") , 1, date("Y")));
    	}
    j'suis pas sur des lettres pour les fonctions mais en tatonnant avec ca ton tableau sera remplit deja ensuite plus qu'a l'ajouter sur ton axe

  7. #7
    Membre actif

    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 472
    Points : 262
    Points
    262
    Par défaut
    Bonjour,

    Pour le traitement des heures, c'est déjà fait, je fais comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for($i=1; $i<=24; $i++)
    {
    	$datax[] = date("H",time()+(3600*$i));
    }
    J'ai donc ici mes graduations pour l'axe X et je les affichent comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $graph->xaxis->SetTickLabels($datax);
    Cependant, ça ne semble pas fonctionner...

    Merci,
    Mathieu

  8. #8
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    Citation Envoyé par MaTHieU_
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    for($i=1; $i<=24; $i++)
    {
    	$datax[] = date("H",time()+(3600*$i));
    }
    il te manques deja "$i" dans $datax[ICI] ensuite verifies que datax soit bien declarer en tant que tableau (on ne sait jamais )

  9. #9
    Membre actif

    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 472
    Points : 262
    Points
    262
    Par défaut
    Bonjour,

    Non, je ne crois pas, il ajoute automatiquement la valeur au tableau comme par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while($res = mysql_fetch_array($req))
    {
    	$ydata[] = $res['MyTemperature'];
    }
    Si je fais un :
    J'ai bien un tableau avec toutes mes valeurs...

    Mathieu

  10. #10
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    d'accord mais alors qu'obtiens tu lors de l'ajout du tableau sur l'axe? est il possible de voir ton code?

  11. #11
    Membre actif

    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 472
    Points : 262
    Points
    262
    Par défaut
    Bonjour,

    Oui, le code et la courbe de résultat se trouvent dans mon premier post.

    L'axe des ordonnées est gradué de manière automatique et correctement. Je souhaite arriver au même résultat avec l'axe des abscisses.

    Merci pour ton aide,
    Mathieu

  12. #12
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    ok j'avais pas fait attention au premier post ! je vais voir ce que je peut faire avec quand j'aurais un moment dans la journée pour me pencher plus serieusement dessus ...

  13. #13
    Membre actif

    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 472
    Points : 262
    Points
    262
    Par défaut
    Merci pour ton aide, je vais continuer à chercher de mon côté aussi après le travail.

    Si d'autres personnes sont interessées par ce problème, leur participation est la bienvenue

    Mathieu

  14. #14
    Membre actif

    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 472
    Points : 262
    Points
    262
    Par défaut
    Bonjour,

    J'ai avancé, voici mes données :
    Array ( [0] => 1153222200 [1] => 1153224000 [2] => 1153225800 [3] => 1153229400 [4] => 1153231200 [5] => 1153233000 [6] => 1153234800 [7] => 1153236600 [8] => 1153238400 [9] => 1153240200 [10] => 1153242000 [11] => 1153243800 [12] => 1153245600 [13] => 1153247400 [14] => 1153249200 [15] => 1153251000 [16] => 1153252800 [17] => 1153254600 [18] => 1153256400 [19] => 1153258200 [20] => 1153260000 [21] => 1153263600 [22] => 1153267200 [23] => 1153278000 [24] => 1153279800 [25] => 1153281600 [26] => 1153285200 [27] => 1153287000 [28] => 1153288800 [29] => 1153290600 [30] => 1153292400 [31] => 1153294200 [32] => 1153296000 [33] => 1153297800 [34] => 1153299600 [35] => 1153301400 [36] => 1153303200 [37] => 1153305000 )

    Array ( [0] => 31 [1] => 31 [2] => 32 [3] => 33 [4] => 33 [5] => 33 [6] => 33 [7] => 33 [8] => 33 [9] => 33 [10] => 33 [11] => 33 [12] => 32 [13] => 32 [14] => 31 [15] => 29 [16] => 28 [17] => 27 [18] => 26 [19] => 25 [20] => 24 [21] => 24 [22] => 24 [23] => 21 [24] => 21 [25] => 21 [26] => 20 [27] => 22 [28] => 22 [29] => 23 [30] => 24 [31] => 25 [32] => 26 [33] => 28 [34] => 29 [35] => 30 [36] => 31 [37] => 32 )
    Voici le résultat :


    Voici mon code :
    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
     
    <?php
    	include('jpgraph.php');
    	include('jpgraph_line.php');
    	include('jpgraph_date.php');
    	include('ouverture.inc.php');
     
    	$sql = "SELECT MyDate,MyTemperature FROM metar WHERE MyDate BETWEEN '".date("Y-m-d H:i:s",time()-3600*24)."' AND '".date("Y-m-d H:i:s")."' ORDER BY MyDate";
    	$req = mysql_query($sql);
    	while($res = mysql_fetch_array($req))
    	{
    		$datay[] = $res['MyTemperature'];
    		$datax[] = strtotime($res['MyDate']);
    	}	
    	include('fermeture.inc.php');
     
    	//print_r($datax);
    	//echo '<br/>';
    	//print_r($datay);
    	//echo '<br/>';
     
    	$graph = new Graph(1000,500);
    	$graph->SetMargin(30,10,10,50);
    	$graph->SetScale("datlin");
    	$graph->xaxis->SetLabelAngle(90);
     
    	$line = new LinePlot($datay,$datax);
    	$line->value->show();
     
    	$graph->Add($line);
    	$graph->Stroke();
    ?>
    J'ai un problème, c'est que 20°C sont à 07:00 et non 08:00 comme affiché sur le graph...

    Savez-vous pourquoi j'ai ce décalage ?

    Merci,
    Mathieu

  15. #15
    Membre actif

    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 472
    Points : 262
    Points
    262
    Par défaut
    Bonjour,

    D'après mes données et mes vérifications, il semblerait que toutes les donénes soient décalées d'une heure...

    C'est étrange...

    Avez-vous déjà eu ce problème ?

    Merci,
    Mathieu

  16. #16
    Membre actif

    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2002
    Messages : 472
    Points : 262
    Points
    262
    Par défaut
    Salut,

    Après pas mal de fouille, j'ai trouvé ça :
    http://jpgraph.intellit.nl/viewtopic.php?t=3163

    Le problème est résolu mais ça semble un peu bourrin...

    Voici mon code :

    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
     
    <?php
     
    	//**********************************
    	$graphique_largeur 	= 500;
    	$graphique_hauteur 	= 250;
    	$graphique_titre   	             = 'Lille (LFQQ) - Température (°C)';
    	$sql_table   		= 'METAR';
    	$sql_champx  		= 'MyDate';
    	$sql_champy  		= 'MyTemperature';
    	//**********************************
     
    	include('jpgraph.php');
    	include('jpgraph_line.php');
    	include('jpgraph_date.php');
     
    	include('ouverture.inc.php');
    	$sql = "SELECT ".$sql_champx.",".$sql_champy." FROM ".$sql_table." WHERE ".$sql_champx." BETWEEN '".date("Y-m-d H:i:s",time()-3600*24)."' AND '".date("Y-m-d H:i:s")."' ORDER BY ".$sql_champx;
    	$req = mysql_query($sql);
    	while($res = mysql_fetch_array($req))
    	{
    		$datax[] = strtotime($res[$sql_champx]);
    		$datay[] = $res[$sql_champy];
    	}	
    	include('fermeture.inc.php');
     
    	$graphique = new Graph($graphique_largeur,$graphique_hauteur);
    	$graphique->SetMargin(30,30,50,50);
    	$graphique->SetMarginColor("lightblue@0.7");
    	$graphique->title->Set($graphique_titre);
    	$graphique->subtitle->Set(date("d/m/Y",time()-3600*24)." - ".date("d/m/Y"));
    	$graphique->SetScale("datlin");
    	$graphique->xaxis->SetLabelAngle(90);
    	$graphique->xgrid->Show();
    	$courbe = new LinePlot($datay,$datax);
    	$graphique->Add($courbe);
    	$graphique->Stroke();
    ?>
    Le résultat :



    Cordialement,
    Mathieu

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

Discussions similaires

  1. [XL-2007] Créer un graphique avec deux axes des abscisses liés (date et numéro de semaine)
    Par LawNasK dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 27/05/2015, 10h27
  2. Réponses: 0
    Dernier message: 06/05/2015, 14h57
  3. Réponses: 0
    Dernier message: 18/09/2010, 22h20
  4. [VxiR2] Graphique avec l'axe des abscisses sur la valeur 0
    Par SageGrImmo dans le forum Deski
    Réponses: 4
    Dernier message: 20/05/2009, 11h49
  5. [JpGraph] Problème avec l'axe des X
    Par shkyo dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 09/08/2007, 10h42

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