Se connecter avec
S'enregistrer | Connectez-vous

Gnuplot - Coloration, isolines, 3d de données

Dernière réponse : dans Programmation

Bonjour à tous,

Je ne sais pas si c'est réellement ici que je dois poster, mais vous allez bien me le dire :) 
Je cherche un expert de Gnuplot (http://gnuplot.sourceforge.net/) pour réaliser des map.
Alors en cherchant un peu, je me suis rendu compte que Gnuplot savait tout faire (ou presque), dont lire un fichier de données et les représenter graphiquement (2d ou 3d).
Cependant, je n'ai pas compris comment faire cette lecture.
J'ai un fichier de valeurs (tout simple), formé de cette façon :
  1. 60
  2. 62
  3. 61
  4. 62
  5. 60
  6. 58
  7. 59
  8. ....


Ces données sont toutes en colonne, mais sont en réalités placé sur une map rectangulaire sous cette forme :
  1. Vx......Vx......Vx......Vx......Vx......Vx
  2. ..........................................
  3. ..........................................
  4. ..........................................
  5. ..........................................
  6. Vx......Vx......Vx......Vx......Vx......Vx
  7. ..........................................
  8. ..........................................
  9. ..........................................
  10. ..........................................
  11. Vx......Vx......Vx......Vx......Vx......Vx
  12. ..........................................
  13. ..........................................
  14. ..........................................
  15. ..........................................
  16. V1......V2......V3......V4......V5......V6


Remarquer que V1 = 60, V2 = 62, V3 = 61, V4 = 62 ...

Avec ces donnée, j'aimerai récupérer une map 3d avec Gnuplot, en fonction de leur valeur. Dans ce style :


Après avoir eu ce résultat, je continuerai de rechercher, car il faudra également que trace les contours comme sur cette image :

(voir les lignes projetés sur le fond)

Voilà, je sais, ça fait beaucoup, mais il doit bien y avoir qqun de calé en Gnuplot ;) 
Merci beaucoup pour toutes vos réponses, elles me seront plus qu'utiles !

Guillaume
Lassé par la pub ? Créez un compte

Meilleure solution

Expert Programmation

pourtant cette erreur :
  1. warning: Cannot contour non grid data. Please use "set dgrid3d".

est claire pour moi.
  1. set dgrid3d 24,38,1
  2. set samples 24,38
  3. set isosamples 24,38
  4. set contour base
  5. # et optionellement set style data lines
  6. splot "ton.dat"



Oui, ça faisait un bout de temps, le temps me manque souvent ! Mais je me vois obligé de revenir, ne serait-ce que pour chercher de l'aide :) 
Tu n'es pas calé Gnuplot Zeb ? J'ai l'impression que plus le temps passe et plus mes interrogations restent sans réponses sur les Forum ... (triste)

En espérant que tu ailles (très) bien Zeb. Et merci à tous les autres pour vos futures réponses, n'hésitez pas, la moindre chose sera la bien venue !
Expert Programmation

guillaumech a dit :
Voilà, je sais, ça fait beaucoup, mais il doit bien y avoir qqun de calé en Gnuplot ;) 
Merci beaucoup pour toutes vos réponses, elles me seront plus qu'utiles !
À chaque fois que je veut faire quelque chose avec gnuplot, je vais dans la gallerie du site officiel, sinon c'est impossible de s'y retrouver, c'est comme pour imagemagick.

dans la galerie on y trouve des pages du genre
http://gnuplot.sourceforge.net/demo/contours.html
qui expliquent en long, large et travers comment faire des isolines et
http://gnuplot.sourceforge.net/demo/scatter.html
qui t'explique comment gridder tes données.

Coucou batchy.

Pour imagemagick, je m'en suis rendu compte également, mais du coup, je suis allé tapé à la source pour me faire aider :) 

Pour ce qui est de Gnuplot, je suis aussi passé par ces pages, mais ce que je n'ai pas trouvé, c'est la structure des données qui faut faire manger aux scripts (les hemisphr.dat ou scatter2.dat ....)
J'aimerai bien comprendre comment fonctionnent ces fichiers, pour réaliser correctement mon problème exposé juste au dessus. (si tu as le temps, je serai bien preneur d'exemple :D  )

Je te remercie de ton aide.
Expert Programmation

[23:21:17]batchy@Batchy:/usr/share/doc/gnuplot-doc/examples$zcat hemisphr.dat.gz
0.687151 -0.636061 0.351070
0.641845 -0.232436 0.730759
0.273514 -0.848211 0.453572
-0.550699 0.813122 0.188582
-0.347821 0.841382 0.413639
-0.829282 -0.509933 0.228604
0.399696 0.466770 0.788903
0.736650 0.020192 0.675973
-0.274921 -0.182391 0.944008
0.222153 -0.841996 0.491621
^C[23:21:28]batchy@Batchy:/usr/share/doc/gnuplot-doc/examples$cat scatter2.dat
25. 1.0 .99443
25. 10.0 .9406
25. 20.0 .8749
25. 30.0 .8030
25. 40.0 .7195
25. 50.0 .6190
25. 60.0 .4844
25. 70.0 .3409


donc oui, il faut rajouter les positions ...

Impeccable Batchy ! Tout fonctionne, sauf les contours :) 
En effet, j'en viens à me demander si il ne traite pas les isolines que sur un interval positif-négatif (-1 et 1)

Car j'ai un fichier comme ceci :


353.000000, 41.500000, 95766.6,
353.500000, 41.500000, 94790.6,
354.000000, 41.500000, 93904.2,
354.500000, 41.500000, 94094.6,
355.000000, 41.500000, 94161.8,
355.500000, 41.500000, 93478.6,
356.000000, 41.500000, 92035.4,
356.500000, 41.500000, 90539.4,
357.000000, 41.500000, 89901,
357.500000, 41.500000, 90121.8,
358.000000, 41.500000, 91917,
358.500000, 41.500000, 94521.8,
359.000000, 41.500000, 96662.6,
359.500000, 41.500000, 98525,
360.000000, 41.500000, 99606.6,
360.500000, 41.500000, 98326.6,
361.000000, 41.500000, 97069,
361.500000, 41.500000, 97654.6,
362.000000, 41.500000, 98841.8,
362.500000, 41.500000, 100059,
363.000000, 41.500000, 101357,
363.500000, 41.500000, 101914,

Tu as le fichier complet dans ta MP

Et je fais comme sur les exemples :
  1. set samples 60, 60
  2. set isosamples 60, 60
  3. set contour base
  4. splot "fichier.dat"


Mais aucune ligne :( 
Si tu as une idée ...

En tout cas, un grand merci ;) 

Oui, ça a bien été la bonne réponse, mais je pose une autre question dans la lignée ... pour ne pas ouvrir 50 sujets.
Je reformule ma demande alors :) 

Voilà l'image :

je souhaiterai pouvoir mettre n'importe quelle image à la place du fond vert.
Voilà, je pourrai pas être plus clair :) 

Merci Batchy
Expert Programmation

mis à part utiliser un bidouillage avec les exemples ou ils affichent des images, je vois pas.

mais peut être qu'il faudrai passer à l'étape supérieure, et aller causer sur la mailling list de gnuplot ;) 
Expert Programmation

dans ce genre d'idée la :
http://gnuplot.sourceforge.net/demo/image2.html

pour ça, il faudrai que tu force la valeur de ton axe z (set zrange 100400,102400 ou un truc du genre) et que tu positionne le centre de l'image sur la valeur minimale. ça devrai marcher à condition que l'image soit déssinée avant le graphe, autrement dit, que tu fasse un splot "image.rgb" ....... puis un replot avec ta courbe.

sinon, pour une mailling-list un peu morte (j'ai pas regardé si celle de gnuplot est active), il faut bien attendre une semaine ou un peu plus.

Merci batchy. J'étais passé sur ces pages, mais je me pose une énorme question ! Quesque leurs fichiers .rgb ? Parce qu'alors là je sèche ... J'ai pris un jpg dans gimp, converti en 256 couleurs, puis en rgb sans compression. J'obtiens une image correcte, sauf dans gnuplot, où là, j'obtiens juste pas grand chose (des bandes de pixels, sans cohérence ...)

Voilà les lignes que j'ai executer :

splot 'image.rgb' binary array=128x128 flip=y format='%uchar%uchar%uchar' using ($1+$2+$3)/3 with image

plot 'image.rgb' binary array=128x128 flipy format='%uchar' every 1:1:43:15:83:65 with rgbimage

Alors je suis peut être passer à côté d'un truc ... C'est que je ne trouve pas que ce soit tout bien expliqué quand même :( 
Genre l'option format ou binary ou array ....
Bref, je m'en remets à toi Batchy ;) 
Expert Programmation

ah oui, j'avais même pas vu.

il faut donc que ton image soit enregistrée en 128 pixel par 128 en rgb, sans entêtes.
Dans the gimp, il faut bien s'assurer d'être en mode RGB, et il faut sauvegarder en tant que "Données d'image raw", version "Standart" et "Normal", le fichier devrai avoir une taille de 128*128*3 octets. (faut vérifier, je sais que cette fonction d'export est buggée)

ensuite tu peut utiliser

plot 'image.rgb' binary array=128x128 format='%uchar' with rgbimage

En mode RGB ? :(  Je ne sais pas si c'est la matin qui veut que je ne le trouve pas ... mais puré, il est où ce mode ? Moi j'ai un mode RVB, c'est ce que tu voulais dire ?

Edit 1 :
En laissant en RVB l'image s'affiche. Néanmoins, en utilisant le code pour l'avoir dans une vue 3d, elle ne s'affiche plus ...

  1. splot 'image.rgb' binary array=360x360 flip=y format='%uchar' with rgbimage
  2. // ou --------------
  3. splot 'image.rgb' binary array=360x360 flip=y format='%uchar%uchar%uchar' with rgbimage
  4. // ou --------------
  5. splot 'image.rgb' binary array=360x360 flip=y format='%uchar%uchar%uchar' with image


Une chose curieuse, la dernière commande me l'affiche bien, mais en suivant les couleurs de la légende, donc pas les couleurs d'origine RGB.
Merci Batchy

Edit 2 :
Citation :
tu fasse un splot "image.rgb" ....... puis un replot avec ta courbe.

Heuu, j'ai essayé, en vain ...

  1. splot 'image.rgb' binary array=500x459 flip=y format='%uchar%uchar%uchar' with image
  2. set dgrid3d 24,38,1
  3. set samples 24,38
  4. set isosamples 24,38
  5. set contour base
  6. set cntrparam levels auto 30
  7. unset surface
  8. set pm3d
  9. set style data lines
  10. set key on outside right top
  11. replot "essai"

Erreur : gridding of color column is not implemented

Désolé de t'harceler de question Batchy :) 

zeb a dit :
RGB = Red Green Blue,
RVB = Rouge Vert Bleu.

C'est pas comme si ce n'était pas la même chose !


:cry:  je vais aller me coucher je crois, rolalala, et puis c'est pas comme si je le voyais 10 fois par semaine ... bref, pas de commentaires zeb :kaola:  lol

Donc, comme précisé au dessus, j'arrive bien à sortir une image RGB ainsi qu'à l'afficher en 2d, mais en 3d ...
Je remonte mes différentes questions ;) 

Citation :

Edit 1 :
En laissant en RVB l'image s'affiche. Néanmoins, en utilisant le code pour l'avoir dans une vue 3d, elle ne s'affiche plus ...

Code :

1. splot 'image.rgb' binary array=360x360 flip=y format='%uchar' with rgbimage
2. // ou --------------
3. splot 'image.rgb' binary array=360x360 flip=y format='%uchar%uchar%uchar' with rgbimage
4. // ou --------------
5. splot 'image.rgb' binary array=360x360 flip=y format='%uchar%uchar%uchar' with image



Une chose curieuse, la dernière commande me l'affiche bien, mais en suivant les couleurs de la légende, donc pas les couleurs d'origine RGB.
Merci Batchy

Edit 2 :
Citation :

tu fasse un splot "image.rgb" ....... puis un replot avec ta courbe.


Heuu, j'ai essayé, en vain ...

Code :

1. splot 'image.rgb' binary array=500x459 flip=y format='%uchar%uchar%uchar' with image
2. set dgrid3d 24,38,1
3. set samples 24,38
4. set isosamples 24,38
5. set contour base
6. set cntrparam levels auto 30
7. unset surface
8. set pm3d
9. set style data lines
10. set key on outside right top
11. replot "essai"


Erreur : gridding of color column is not implemented

Désolé de t'harceler de question Batchy :) 


Merci à tous.
Expert Programmation

guillaumech a dit :
Edit 1 :
En laissant en RVB l'image s'affiche. Néanmoins, en utilisant le code pour l'avoir dans une vue 3d, elle ne s'affiche plus ...

  1. splot 'image.rgb' binary array=360x360 flip=y format='%uchar' with rgbimage
chezmoiçamarche.org

est tu sur que ton fichier est bien crée ? à t'il une taille correcte ? (largeur * hauteur * 3)

est ce que tu te serait pas fait avoir par un bug de cette fonction d'export ? (le moyen que j'utilise pour vérifier, c'est généralement un xd ou un autre viewer hexadecimal)

guillaumech a dit :
Edit 2 :
Citation :
tu fasse un splot "image.rgb" ....... puis un replot avec ta courbe.

Heuu, j'ai essayé, en vain ...

  1. splot 'image.rgb' binary array=500x459 flip=y format='%uchar%uchar%uchar' with image
  2. set dgrid3d 24,38,1
  3. set samples 24,38
  4. set isosamples 24,38
  5. set contour base
  6. set cntrparam levels auto 30
  7. unset surface
  8. set pm3d
  9. set style data lines
  10. set key on outside right top
  11. replot "essai"

Erreur : gridding of color column is not implemented

Désolé de t'harceler de question Batchy :) 

ça chez moi ça marche :

set contour base
splot [:][:][-1:200] 'fuck.rgb' binary array=128x128 flip=y format='%uchar' center=(50,50,-1) with rgbimage, 100+x*sin(y/20)

ça se voit un peu que l'image est pas au bon endroit, mais c'est le seul bidouillage que j'arrive à faire.

pour ton erreur, c'est qu'à mon avis qu'il est en train de vouloir afficher tes données comme si c'était une image, faut utiliser le with par défault (je le connais pas, mais il doit pouvoir être facile à trouver dans la doc)

C'est fou ça .... :(  ça ne fonctionne pas ici (testé sous Windows & Debian)

Mon image à la bonne taille, j'arrive à l'afficher avec des couleurs (pourries) grâce à cette commande :
splot 'image.rgb' binary array=500x459 flipy format='%uchar' with image

mais avec :

splot 'image.rgb' binary array=500x459 flipy format='%uchar' with rgbimage

j'ai rien à l'écran ... mise à part l'erreur : Color boxes cannot handle RGB components

J'ai essayer ça :
set dgrid3d 24,38,1
set samples 24,38
set isosamples 24,38
set contour base
splot 'image.rgb' binary array=500x459 flip=y format='%uchar' center=(50,50,-1) with rgbimage, 100+x*sin(y/20)

Idem, rien ne s'affiche, sauf la fonction sinus et l'erreur : gridding of color column is not implemented

Si je n'utilise pas le set dgrid3d et les samples, il me met en erreur et me dit de les utiliser ...

Chez toi ça fonctionne à l'ouverture de gnuplot ? Directement, en copiant les lignes ? Ou tu as paramétré des trucs avant ?
C'est bien étrange quand même.

J'ai utilisé cette image : http://www.lesradars.com/images/france-regions-01.jpg
La taille finale est : 672 Ko (688 500 octets) ça me parait correcte ...

Merci Batchy
Expert Programmation

guillaumech a dit :
C'est fou ça .... :(  ça ne fonctionne pas ici (testé sous Windows & Debian)

Mon image à la bonne taille, j'arrive à l'afficher avec des couleurs (pourries) grâce à cette commande :
splot 'image.rgb' binary array=500x459 flipy format='%uchar' with image
c'est que ton image est pas bonne. faut comprendre le paramètre "format" un peu : c'est le même qui permet de lire plusieurs nombres sur une seule ligne. Avec "image" tout court, il à juste besoin d'une seule valeur, qu'il va mettre sur son échelle de couleur configurable (mais toujours moche). si tu met qu'un seul %uchar par pixel et que ça marche, ça veut dire que ton image est en 8bit, après je ne sais pas comment tu t'est débrouillé, si c'est de la couleur indexée ou autre, mais ça n'est pas du 24 bit.



guillaumech a dit :
mais avec :

splot 'image.rgb' binary array=500x459 flipy format='%uchar' with rgbimage

j'ai rien à l'écran ... mise à part l'erreur : Color boxes cannot handle RGB components
même quand j'essaye de lui faire bouffer une image 8bit, ça me fait pas cette erreur. par contre, ça rame, et il m'affiche trois fois ce pays.
guillaumech a dit :
J'ai essayer ça :
set dgrid3d 24,38,1
set samples 24,38
set isosamples 24,38
set contour base
splot 'image.rgb' binary array=500x459 flip=y format='%uchar' center=(50,50,-1) with rgbimage, 100+x*sin(y/20)
y a pas besoin de dgrid tant que t'a pas des données discrètes à rendre continues. les deux lignes que j'ai donnée sont les deux seules lignes que j'ai tapée.
guillaumech a dit :
Chez toi ça fonctionne à l'ouverture de gnuplot ? Directement, en copiant les lignes ? Ou tu as paramétré des trucs avant ?
j'ai pas souvenir que gnuplot était paramétrable. j'utilise juste la derniere version dans Sid.
guillaumech a dit :
La taille finale est : 672 Ko (688 500 octets) ça me parait correcte ...
à moi aussi ça me parait correct, mais chez moi ça marche.

[21:42:11]batchy@Batchy:/tmp$gnuplot

G N U P L O T
Version 4.4 patchlevel 0
last modified March 2010
System: Linux 2.6.32.8batchyx11

Copyright (C) 1986-1993, 1998, 2004, 2007-2010
Thomas Williams, Colin Kelley and many others

gnuplot home: http://www.gnuplot.info
faq, bugs, etc: type "help seeking-assistance"
immediate help: type "help"
plot window: hit 'h'

Terminal type set to 'wxt'
gnuplot> splot 'fuckcountry.rgb' binary array=500x459 format='%uchar' with rgbimage
Warning: empty z range [0:0], adjusting to [-1:1]
gnuplot>

Je viens de refaire une image, ça fonctionne ... mais c 'est juste affreusement lent pfffouaaa, intraitable dans une application ! :'( 
Surtout que j'ai un peu peur qu'il ne sache utiliser qu'un serveur graphique et non faire ses opérations en mémoire. Car même en définissant une sortie image, il affiche une fenêtre ! C'est cool si je fais tourner ça sur un serveur sans un bon vieux xorg .... sa va juste donner rien du tout. J'ai un peu beaucoup peur là en faite !

Edit : je retire, erreur de ma part. Je vais continuer de grater, désolé :) 

Me re-voilà Batchy :) 

J'arrive à afficher l'image, mais je n'arrive pas à projeter les isolignes.
J'ai essayer :

guich@guich:~/lib.modele/wgrib2$ gnuplot

G N U P L O T
Version 4.4 patchlevel 0
last modified March 2010
System: Linux 2.6.26-2-686

Copyright (C) 1986-1993, 1998, 2004, 2007-2010
Thomas Williams, Colin Kelley and many others

gnuplot home: http://www.gnuplot.info
faq, bugs, etc: type "help seeking-assistance"
immediate help: type "help"
plot window: hit 'h'

Terminal type set to 'x11'
gnuplot> set dgrid3d 24,38,1
gnuplot> set contour base
gnuplot> splot 'carte.rgb' binary array=20x16 flip=y format='%uchar' center=(362,45,0) with rgbimage, "essai"
Gridding of the color column is not implemented


Mais erreur ...

Alors tu vas me dire, pas besoin du dgrid ... voilà :

guich@guich:~/lib.modele/wgrib2$ gnuplot

G N U P L O T
Version 4.4 patchlevel 0
last modified March 2010
System: Linux 2.6.26-2-686

Copyright (C) 1986-1993, 1998, 2004, 2007-2010
Thomas Williams, Colin Kelley and many others

gnuplot home: http://www.gnuplot.info
faq, bugs, etc: type "help seeking-assistance"
immediate help: type "help"
plot window: hit 'h'

Terminal type set to 'x11'
gnuplot> set contour base
gnuplot> splot 'carte.rgb' binary array=20x16 flip=y format='%uchar' center=(362,45,0) with rgbimage, "essai"
warning: Cannot contour non grid data. Please use "set dgrid3d".


Du coup, voilà :) 
Si tu retournes dans tes mails perso (du forum), tu as mon fichier essai complet. Par contre, avec ta fonction sinus, ça fonctionne ! Mais avec une grille de donnée ... (et là, je prend les données dans un fichier, donc ça doit créer une grille derrière je suppose).

Merci Batchy :hello: 

Si des fois tu as un petit peu de temps ce week-end Batchy, n'hésites pas à tester mon fichier "essai", car j'ai eu beau continuer de creuser, je crois que je n'ai pas trouvé l'or que je cherchais.

Merci.
[pour moi, week-end mariage de la frangine, donc pas de geekerie ;) ]
Lassé par la pub ? Créez un compte