Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1332 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Tracer une courbe avec Artichow

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Tracer une courbe avec Artichow

n°2058062
Magg27
Posté le 19-02-2011 à 20:01:47  profilanswer
 

Bonjour,
 
Je stocke des informations sur des tracés GPS (latitude, longitude, altitude, distance, ...). A l'aide de ces infos je souhaiterai tracé une courbe représentant les dénivelés du tracé en fonction de la distance. J'ai alors pensé à utiliser la librairie jpGraph. Mais toutes les courbes réalisées avec JpGraph que j'ai pu voir sur le net sont des trucs de "petits joueurs" en terme de quantité de données représentés. Pour chaque trace GPS, j'ai deux gros tableaux : un qui contient l'accumulation des distances entre chaque point GPS (que je voudrais modéliser sur l'axe des abscisses) et un autre qui contient les altitudes de chaque points GPS (que je voudrais modéliser sur l'axe des ordonnées). Pour vous donner un exemple, je souhaiterai mes courbes se présentent comme celle-ci : http://www.tracegps.com/fichiers/100/deniv/9271de.png
 
J'ai testé pas mal de chose sur JpGraph et même Artichow mais je n'arrive pas à mettre mes deux tableaux synchro et ça me donne un rendu assez moche ... Il n'y a pas beaucoup de tutos sur le net à ce sujet mis à part de nombreux petits exemples .. Merci pour votre aide ;)


Message édité par Magg27 le 20-02-2011 à 12:50:58
mood
Publicité
Posté le 19-02-2011 à 20:01:47  profilanswer
 

n°2058065
flo850
moi je
Posté le 19-02-2011 à 20:13:46  profilanswer
 

tu asseble tes deux tableaux pour en avoir un seul distance => altitude et tu files le tout a jpgraph

n°2058083
Magg27
Posté le 19-02-2011 à 21:17:45  profilanswer
 

Merci flo mais j'ai le regret de te dire que ça ne marche pas ... "erreur 25044 : Cannot use auto scaling since it is impossible to determine a valid min/max value of the Y-axis (only null values)."
 
Mon code :
 

Code :
  1. <?php
  2. require_once("jpgraph/src/jpgraph.php" );
  3. require_once("jpgraph/src/jpgraph_line.php" );
  4. $lines = file("http://ns11.freeheberg.com/~mastoc/txt/1.txt" );
  5. $count_point=count($lines);
  6. $i=2;
  7. $j=0;
  8. while($i<$count_point)
  9. {
  10. $valeur=floatval($lines[$i+1]);
  11.     $values[$j][1]=$valeur;
  12. $valeur=floatval($lines[$i]);
  13.     $values[$j][2]=$valeur;
  14. $j=$j+1;
  15. $i=$i+4;
  16. }
  17. // Creation du graphique
  18. $graph = new Graph(300,200);
  19. $graph->SetScale("textlin" );
  20. // Création du système de points
  21. $lineplot=new LinePlot($values);
  22. // On rajoute les points au graphique
  23. $graph->Add($lineplot);
  24. // Affichage
  25. $graph->Stroke();
  26. ?>

n°2058155
Magg27
Posté le 20-02-2011 à 12:50:38  profilanswer
 

up ?
 
Finalement je vais utiliser Artichow. Pour faire plus simple, j'ai un tas de points de coordonnées X/Y que j'aimerais représenter sur un graphique et relier chaque point entre eux. Une courbe quoi ... Or sur Artichow (ou même JpGraph) on peut mettre que les valeurs de Y. C'est normal ?

n°2058160
flo850
moi je
Posté le 20-02-2011 à 13:07:25  profilanswer
 

tu peux faire afficher ton tableau de points
a mon avis, il ne contient pas ce que tu penses et le problème ne vient pas de jpgraph n id'artishow


Message édité par flo850 le 20-02-2011 à 13:07:44
n°2058166
Magg27
Posté le 20-02-2011 à 13:39:05  profilanswer
 

Mon tableau :

 
Code :
  1. Array ( [0] => Array ( [1] => 0 [2] => 72.336647 ) [1] => Array ( [1] => 0.063 [2] => 71.963516 ) [2] => Array ( [1] => 0.101 [2] => 70.76535 ) [3] => Array ( [1] => 0.215 [2] => 71.149155 ) [4] => Array ( [1] => 0.277 [2] => 70.911964 ) [5] => Array ( [1] => 0.418 [2] => 67.300827 ) [6] => Array ( [1] => 0.47 [2] => 66.362495 ) [7] => Array ( [1] => 0.513 [2] => 65.937492 ) [8] => Array ( [1] => 0.654 [2] => 64.349159 ) [9] => Array ( [1] => 0.707 [2] => 64.338234 ) [10] => Array ( [1] => 0.745 [2] => 64.862488 ) [11] => Array ( [1] => 0.78 [2] => 65.587494 ) [12] => Array ( [1] => 0.818 [2] => 66.487495 ) [13] => Array ( [1] => 0.839 [2] => 67.012489 ) [14] => Array ( [1] => 0.868 [2] => 67.599159 ) [15] => Array ( [1] => 0.884 [2] => 67.899155 ) [16] => Array ( [1] => 0.903 [2] => 68.361671 ) [17] => Array ( [1] => 0.927 [2] => 69.340286 ) [18] => Array ( [1] => 0.946 [2] => 70.524139 ) [19] => Array ( [1] => 0.966 [2] => 71.986176 ) [20] => Array ( [1] => 0.98 [2] => 72.8778 ) [21] => Array ( [1] => 0.995 [2] => 73.725533 ) [22] => Array ( [1] => 1.016 [2] => 74.995529 ) [23] => Array ( [1] => 1.035 [2] => 75.389061 ) [24] => Array ( [1] => 1.068 [2] => 76.352623 ) [25] => Array ( [1] => 1.086 [2] => 77.063011 ) [26] => Array ( [1] => 1.111 [2] => 78.140831 ) [27] => Array ( [1] => 1.125 [2] => 78.881477 ) [28] => Array ( [1] => 1.151 [2] => 79.897263 ) [29] => Array ( [1] => 1.171 [2] => 80.571518 ) [30] => Array ( [1] => 1.198 [2] => 79.6633 ) [31] => Array ( [1] => 1.219 [2] => 79.332855 ) [32] => Array ( [1] => 1.24 [2] => 79.888298 ) [33] => Array ( [1] => 1.26 [2] => 80.627716 ) [34] => Array ( [1] => 1.275 [2] => 81.144798 ) [35] => Array ( [1] => 1.286 [2] => 81.448456 ) [36] => Array ( [1] => 1.306 [2] => 82.384422 ) [37] => Array ( [1] => 1.368 [2] => 83.644691 ) [38] => Array ( [1] => 1.394 [2] => 84.295807 ) [39] => Array ( [1] => 1.41 [2] => 85.370811 ) [40] => Array ( [1] => 1.436 [2] => 87.170807 ) [41] => Array ( [1] => 1.469 [2] => 89.320808 ) [42] => Array ( [1] => 1.508 [2] => 92.24482 ) [43] => Array ( [1] => 1.561 [2] => 96.286484 ) [44] => Array ( [1] => 1.602 [2] => 99.326805 ) [45] => Array ( [1] => 1.617 [2] => 100.740372 ) [46] => Array ( [1] => 1.648 [2] => 103.396629 ) [47] => Array ( [1] => 1.68 [2] => 105.796638 ) [48] => Array ( [1] => 1.712 [2] => 108.386635 ) [49] => Array ( [1] => 1.726 [2] => 109.711639 ) [50] => Array ( [1] => 1.745 [2] => 110.911636 ) [51] => Array ( [1] => 1.757 [2] => 111.803841 ) [52] => Array ( [1] => 1.773 [2] => 112.404716 ) [53] => Array ( [1] => 1.789 [2] => 112.930901 ) [54] => Array ( [1] => 1.838 [2] => 115.608299 ) [55] => Array ( [1] => 1.923 [2] => 119.031013 ) [56] => Array ( [1] => 1.979 [2] => 119.593163 ) [57] => Array ( [1] => 1.993 [2] => 119.588051 ) [58] => Array ( [1] => 2.026 [2] => 119.26416 ) [59] => Array ( [1] => 2.073 [2] => 118.963318 ) [60] => Array ( [1] => 2.115 [2] => 118.976097 ) [61] => Array ( [1] => 2.158 [2] => 119.156029 ) [62] => Array ( [1] => 2.198 [2] => 119.899139 ) [63] => Array ( [1] => 2.213 [2] => 120.474136 ) [64] => Array ( [1] => 2.258 [2] => 121.96035 ) [65] => Array ( [1] => 2.305 [2] => 123.025826 ) [66] => Array ( [1] => 2.354 [2] => 123.334801 ) [67] => Array ( [1] => 2.389 [2] => 124.213333 ) [68] => Array ( [1] => 2.419 [2] => 124.66333 ) [69] => Array ( [1] => 2.441 [2] => 124.840919 ) [70] => Array ( [1] => 2.461 [2] => 124.429749 ) [71] => Array ( [1] => 2.495 [2] => 124.028008 ) [72] => Array ( [1] => 2.535 [2] => 123.360619 ) [73] => Array ( [1] => 2.574 [2] => 122.624825 ) [74] => Array ( [1] => 2.61 [2] => 121.31723 ) [75] => Array ( [1] => 2.637 [2] => 119.519302 ) [76] => Array ( [1] => 2.656 [2] => 117.986198 ) [77] => Array ( [1] => 2.669 [2] => 116.824928 ) [78] => Array ( [1] => 2.679 [2] => 116.074806 ) [79] => Array ( [1] => 2.707 [2] => 115.851662 ) [80] => Array ( [1] => 2.721 [2] => 114.454849 ) )
 

Je n'ai pas mis le tableau entier car il est très gros mais je peux t'assurer que chaque cellule contient une valeur numérique même la dernière.

 

code php :

 
Code :
  1. <?php
  2. require_once "Artichow/LinePlot.class.php";
  3. $lines = file("http://ns11.freeheberg.com/~mastoc/txt/2.txt" );
  4. $count_point=count($lines);
  5. $i=2;
  6. $j=0;
  7. while($i<$count_point)
  8. {
  9. $valeur=floatval($lines[$i+1]);
  10.     $values[$j][1]=$valeur;
  11. $valeur=floatval($lines[$i]);
  12.     $values[$j][2]=$valeur;
  13. $j=$j+1;
  14. $i=$i+4;
  15. }
  16. $graph = new Graph(400, 400);
  17. $plot = new LinePlot($values);
  18. $plot->xAxis->label->setAngle(90);
  19. $plot->xAxis->setLabelInterval(100);
  20. // On affiche le graphique
  21. // Les valeurs de l'axe des X ont été automatiquement mises à jour
  22. $graph->add($plot);
  23. $graph->draw();
  24. // Finalement, la courbe représentative de log(x) apparaît très correctement
  25. ?>
 

Erreur Artichow : "Class Plot : Expected numeric values for the plot."

 


Sinon avec ce code :

 
Code :
  1. <?php
  2. require_once "Artichow/LinePlot.class.php";
  3. $lines = file("http://ns11.freeheberg.com/~mastoc/txt/2.txt" );
  4. $count_point=count($lines);
  5. $i=2;
  6. $j=0;
  7. while($i<$count_point)
  8. {
  9. $valeur=floatval($lines[$i+1]);
  10.     $tab_distance[$j]=$valeur;
  11. $valeur=floatval($lines[$i]);
  12.     $tab_altitude[$j]=$valeur;
  13. $j=$j+1;
  14. $i=$i+4;
  15. }
  16. $graph = new Graph(400, 400);
  17. $plot = new LinePlot($tab_altitude);
  18. $plot->xAxis->setLabelText($tab_distance);
  19. $plot->xAxis->label->setAngle(90);
  20. $plot->xAxis->setLabelInterval(100);
  21. // On affiche le graphique
  22. // Les valeurs de l'axe des X ont été automatiquement mises à jour
  23. $graph->add($plot);
  24. $graph->draw();
  25. // Finalement, la courbe représentative de log(x) apparaît très correctement
  26. ?>
 

J'ai bien réussi à faire ce graphique http://ns11.freeheberg.com/~mastoc/test.php mais l'échelle n'est pas bonne du tout ... Je suis encore loin de cette qualité là : http://www.tracegps.com/fichiers/100/deniv/9271de.png ..

 

Bref, si tout ceci te parle, merci pour ton aide  :)


Message édité par Magg27 le 20-02-2011 à 13:43:32
n°2058220
Magg27
Posté le 20-02-2011 à 20:24:05  profilanswer
 

Personne n'a une solution pour reproduire ce graphique : http://www.tracegps.com/fichiers/100/deniv/9271de.png avec Artichow ? J'ai pas arrêté de scruter le net et je ne vois que des graphiques en fonction de jour de la semaine, d'année ou des petits array tout pourris du genre array(-3,2,1,4,5) ... Ca ne m'avance pas beaucoup ..


Message édité par Magg27 le 20-02-2011 à 20:25:23
n°2058283
rufo
Pas me confondre avec Lycos!
Posté le 21-02-2011 à 09:58:52  profilanswer
 

Dans mon appli Astres (cf signature), j'ai un module de production de stats (y'en a nombreux types). Si, effectivement, j'en produit un bon nombre avec comme axe X, des dates/semaine/mois/années, j'en ai aussi avec des nombres. Par ailleurs, j'ai inclus une couche d'abstraction qui permet d'utiliser indifféremment JPGraph et Artichow. Regardes, si y'aurait pas des fonctions dans mon code qui pourraient t'aider ;)


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2058516
Magg27
Posté le 21-02-2011 à 18:36:17  profilanswer
 

C'est vraiment très ympa à toi rufo mais je m'y perd dans ta réalisation ... Je vois pas trop où cherché .. T'aurais moyen de me pondre un graphique un peu comme celui-ci : http://www.tracegps.com/fichiers/100/deniv/9271de.png en réutilisant mon petit code ? :

 
Code :
  1. <?php
  2. require_once "Artichow/LinePlot.class.php";
  3. $lines = file("http://ns11.freeheberg.com/~mastoc/txt/2.txt" );
  4. $count_point=count($lines);
  5. $i=2;
  6. $j=0;
  7. while($i<$count_point)
  8. {
  9. $valeur=floatval($lines[$i+1]);
  10. $tab_distance[$j]=$valeur;
  11. $valeur=floatval($lines[$i]);
  12. $tab_altitude[$j]=$valeur;
  13. $j=$j+1;
  14. $i=$i+4;
  15. }
  16. $graph = new Graph(400, 400);
  17. $plot = new LinePlot($tab_altitude);
  18. $plot->xAxis->setLabelText($tab_distance);
  19. $plot->xAxis->label->setAngle(90);
  20. $plot->xAxis->setLabelInterval(100);
  21. // On affiche le graphique
  22. // Les valeurs de l'axe des X ont été automatiquement mises à jour
  23. $graph->add($plot);
  24. $graph->draw();
  25. // Finalement, la courbe représentative de log(x) apparaît très correctement
  26. ?>
 

Il marche bien. Comme tu peux le voir ici : http://ns11.freeheberg.com/~mastoc/test.php c'est juste la mise en page qui me pose problème.


Message édité par Magg27 le 21-02-2011 à 18:37:07
n°2058661
rufo
Pas me confondre avec Lycos!
Posté le 22-02-2011 à 11:22:12  profilanswer
 

La surcouche que j'ai développée se trouve dans /Astres/Support/Stats/StatsLibrary.php. Sa mise en oeuvre se trouve dans les fichiers qui se trouvent dans /Astres/Support/Stats/ et don le nom commence par "Process...".
 
La fonction "surcouche" se nomme createGraphicStats(). Pour utiliser directement celle pour Artichow, faut prendre createGraphicArtichowStats().
 
Je pense que l'un de tes pbs, si j'ai bien compris, outre le grand nb de données à afficher, est que l'axe X n'a pas des valeurs espacées de manière identique (pas un intervalle). Tu peux donc résoudre ton pb comme ça : http://www.artichow.org/doc/Axis#method.addTick
Ne pas activer la gestion de l'axe X automatique et générer des ticks (fonction addTick()). Dans mon appli, de mémoire, je n'avais pas ce cas de figure à gérer.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
mood
Publicité
Posté le 22-02-2011 à 11:22:12  profilanswer
 

n°2058807
Magg27
Posté le 22-02-2011 à 18:09:07  profilanswer
 

Oui voilà tu as presque tout compris. Ma courbe est aussi obligée d'utiliser des points de coordonnées précis (c'est-à-dire X et Y) et pas seulement une succession de valeurs Y indépendantes de X. Pourquoi ?

 

Les traces GPS s'obtiennent avec un petit appareil mobile qui enregistre les points aussi bien à l'arrêt qu'en déplacement. Typiquement, on peut avoir ce genre de relevé :

 


Kilomètres parcourus (km) (X) |  Altitude (m) (Y)

 

0 (Départ)                           | 100
0.5                                    |  105
1                                       |  90
2                                       |  95
2 (Pause café)                     |   95
2 (Pause café)                     |   95
2 (Pause café)                     |   95
2 (Pause café)                     |   95
2 (Pause café)                     |   95
2.5 (Reprise)                       |   96
3 (Arrivée)                          |   100

 


Maintenant que j'ai mes tableaux kilomètre et altitude, et si j'utilise seulement mes altitudes pour tracer ma courbe, on est d'accord que ma courbe va continuer à évoluer au fil des kilomètres durant la pause café ... et ça fausse tout puisque la longeur de l'axe des abscisses ne sera pas forcément représentative de la distance totale du parcours.
Donc ce n'est pas seulement une histoire d'échelle ou de ticks à configurer ...

 

Mon projet serait-il plus facile à réaliser avec jpgraph par exemple ? jpgraph a l'air de présenter davantage de doc (essentiellement anglophone) mais je n'ai pas encore ce qu'il me faut ..

 

Merci rufo de m'avoir fait découvrir ton appli mais effectivement il n'y a pas le même cas de figure que moi.

 

Merci pour ton aide  :)


Message édité par Magg27 le 22-02-2011 à 19:19:25
n°2058835
Magg27
Posté le 22-02-2011 à 19:45:38  profilanswer
 

Bon en fait j'ai trouvé mon bonheur  :) (voyez par vous-même : http://ns11.freeheberg.com/~mastoc/test.php ). Petite librairie JS peu connu apparemment : http://www.jscharts.com/ . Ca fait de jolies graphique très rapide à charger : c'est époustouflant ... Facile à customiser. Seul bémol on dirait qu'il y a des droits dessus ... La licence coûte 149$ (cf : en bas de la page d'accueil). On peut bien sûr l'utiliser gratuitement à titre personnel mais je ne sais pas si j'ai bien le droit de l'utiliser sur mon site perso en ligne ... Qu'en pensez-vous ?


Message édité par Magg27 le 22-02-2011 à 19:46:18
n°2058927
rufo
Pas me confondre avec Lycos!
Posté le 23-02-2011 à 10:22:49  profilanswer
 

Pour un site perso sans but commercial, tu peux.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2059075
Magg27
Posté le 23-02-2011 à 15:07:58  profilanswer
 

OK Merci pour ton aide rufo  ;)  A+


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Tracer une courbe avec Artichow

 

Sujets relatifs
prendre les plus haut d'une courbeprendre les plus haut d'une courbe
Algorithme d'extraction de courbe[Scilab] Tracer une matrice en fonction de deux autres
jpgraph et base de donneeunicité d'une courbe de HIlbert en 3D a partir du motif initial
tracer une ligne verticale en vba (excel)Tracer des courbes en Java
Tracer des cercles avec Tkinter[MatLab] Fitter une courbe d'Hystérésis
Plus de sujets relatifs à : Tracer une courbe avec Artichow


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR