FAQ Unix, section "Graphiques"

Autres sections : General - LaTeX - emacs

Cette section :


Comment fait-on de jolis dessins ?

Soit avec Visual Thought (vtought) soit avec xfig.
Pour du traitement d'image plus compliqué je recommande gimp. Il n'est actuellement disponible que sur liasun13.


Comment tracer des courbes ?
Comment afficher des données avec gnuplot ?
ou une introduction simple à gnuplot

gnuplot ou matlab (sur liasun13). gnuplot est le plus simple. Il permet de tracer des fonctions et des données en 2D et 3D.

L'utilisation la plus courante est le dessin 2D de données. Il suffit alors d'avoir un fichier avec une coordonnée par colonne, de lancer gnuplot et de taper
plot "mon_fichier"
Si on veut plusieurs courbes, c'est très similaire. Si les différentes courbes sont dans des fichiers différents on fait
plot "mon_fichier1", "mon_fichier2", "mon_fichier3"
et si ce sont différentes colonnes d'un même fichier, par exemple les x1 en 3ieme colonne, les y1 en 1ere colonne, les x2 en 5ieme colonne et les y2 en 6ieme colonne, on fait
plot "mon_fichier1" u 3:1, "mon_fichier1" u 5:6

gnuplot permet de faire beaucoup d'autres choses et bien souvent d'avoir exactement le graphique que vous désirez. Voir la doc et/ou me consulter si nécessaire.


Comment avoir des accents en PostScript plutôt que ces dessins bizards ?

Il faut pour cela recoder la fonte utilisée. Cela se fait en deux étapes :

  1. définir les macros de recodage de font
  2. changer tous les appels à des fontes non accentuées.

Pour définir les macros il suffit d'ajouter ceci :

/encoding_vector [
/.notdef      	/.notdef      	/.notdef      	/.notdef      	
/.notdef      	/.notdef      	/.notdef      	/.notdef      	
/.notdef      	/.notdef      	/.notdef      	/.notdef      	
/.notdef      	/.notdef      	/.notdef      	/.notdef      	
/.notdef      	/.notdef      	/.notdef      	/.notdef      	
/.notdef      	/.notdef      	/.notdef      	/.notdef      	
/.notdef      	/.notdef      	/.notdef      	/.notdef      	
/.notdef      	/.notdef      	/.notdef      	/.notdef      	
/space        	/exclam       	/quotedbl     	/numbersign   	
/dollar       	/percent      	/ampersand    	/quoteright   	
/parenleft    	/parenright   	/asterisk     	/plus         	
/comma        	/minus        	/period       	/slash        	
/zero         	/one          	/two          	/three        	
/four         	/five         	/six          	/seven        	
/eight        	/nine         	/colon        	/semicolon    	
/less         	/equal        	/greater      	/question     	
/at           	/A            	/B            	/C            	
/D            	/E            	/F            	/G            	
/H            	/I            	/J            	/K            	
/L            	/M            	/N            	/O            	
/P            	/Q            	/R            	/S            	
/T            	/U            	/V            	/W            	
/X            	/Y            	/Z            	/bracketleft  	
/backslash    	/bracketright 	/asciicircum  	/underscore   	
/quoteleft    	/a            	/b            	/c            	
/d            	/e            	/f            	/g            	
/h            	/i            	/j            	/k            	
/l            	/m            	/n            	/o            	
/p            	/q            	/r            	/s            	
/t            	/u            	/v            	/w            	
/x            	/y            	/z            	/braceleft    	
/bar          	/braceright   	/tilde        	/.notdef      	
/.notdef      	/.notdef      	/.notdef      	/.notdef      	
/.notdef      	/.notdef      	/.notdef      	/.notdef      	
/.notdef      	/.notdef      	/.notdef      	/.notdef      	
/.notdef      	/.notdef      	/.notdef      	/.notdef      	
/.notdef      	/.notdef      	/.notdef      	/.notdef      	
/.notdef      	/.notdef      	/.notdef      	/.notdef      	
/.notdef      	/.notdef      	/.notdef      	/.notdef      	
/.notdef      	/.notdef      	/.notdef      	/.notdef      	
/space        	/exclamdown   	/cent         	/sterling     	
/currency     	/yen          	/brokenbar    	/section      	
/dieresis     	/copyright    	/ordfeminine  	/guillemotleft	
/logicalnot   	/hyphen       	/registered   	/macron       	
/degree       	/plusminus    	/twosuperior  	/threesuperior	
/acute        	/mu           	/paragraph    	/bullet       	
/cedilla      	/dotlessi     	/ordmasculine 	/guillemotright	
/onequarter   	/onehalf      	/threequarters	/questiondown 	
/Agrave       	/Aacute       	/Acircumflex  	/Atilde       	
/Adieresis    	/Aring        	/AE           	/Ccedilla     	
/Egrave       	/Eacute       	/Ecircumflex  	/Edieresis    	
/Igrave       	/Iacute       	/Icircumflex  	/Idieresis    	
/Eth          	/Ntilde       	/Ograve       	/Oacute       	
/Ocircumflex  	/Otilde       	/Odieresis    	/multiply     	
/Oslash       	/Ugrave       	/Uacute       	/Ucircumflex  	
/Udieresis    	/Yacute       	/Thorn        	/germandbls   	
/agrave       	/aacute       	/acircumflex  	/atilde       	
/adieresis    	/aring        	/ae           	/ccedilla     	
/egrave       	/eacute       	/ecircumflex  	/edieresis    	
/igrave       	/iacute       	/icircumflex  	/idieresis    	
/eth          	/ntilde       	/ograve       	/oacute       	
/ocircumflex  	/otilde       	/odieresis    	/divide       	
/oslash       	/ugrave       	/uacute       	/ucircumflex  	
/udieresis    	/yacute       	/thorn        	/ydieresis    	
] def
/MF {	% fontname newfontname -> -	make a new encoded font
  /newfontname exch def
  /fontname exch def

  /fontdict fontname findfont def
  /newfont fontdict maxlength dict def

  fontdict {
    exch 
    dup /FID eq {
      % skip FID pair
      pop pop
    } {
      % copy to the new font dictionary
      exch newfont 3 1 roll put
    } ifelse
  } forall
  
  newfont /FontName newfontname put

  % insert only valid encoding vectors
  encoding_vector length 256 eq {
    newfont /Encoding encoding_vector put
  } if
  
  newfontname newfont definefont pop
} def
au niveau des définitions (en général après les premiers commentaires (% ou %%) du fichier, souvent après le
%%EndComments
ou le
%%BeginProlog

Pour changer les appels, il faut trouver tous les findfont (ou équivalents !! Attentions au PostScript qui redéfinisent des macros équivalentes à findfont) que l'on souhaite changer et de les remplacer par

/myfont MF /myfont
Attention ! myfont est un nom de variable, si donc il y a plusieurs font à changer il faudra utiliser plusieurs noms différents.

Exemple :
remplacer

/Helvetica findfont 14 scalefont setfont
par
/Helvetica /myfont MF
/myfont findfont 14 scalefont setfont

Comment dessiner une droite verticale (x=cte) avec gnuplot

Il y a au moins 4 solutions, pas toutes équivalentes ni aussi jolies.

  1. La première solution, facile mais pas très jolie, consiste à tracer une droite de pente assez forte (tendant vers l'infini) qui passe par votre point. Mais attention ! Pour pouvoir la voir il faut alors que votre pas de dessin soit assez fin, sinon la droite passera "trop vite" entre 2 points de votre dessins.

    Prennons un exemple. Vous dessinez sin(x) pour x entre -1 et 1 et vous voulez dessiner la droite x=0.2.
    Cela donne:

    plot [-1:1][-1:1] 10000*(x-0.2) t "", sin(x)
    mais la vous ne voyez rien car le pas de dessin est trop petit par rapport a 10000. Il faut l'augmenter, par exemple
    set sample 10000
    (n'oubliez pas le rep si vous voulez voir le nouveau résultat).

    Mais vous voyez que le resultat n'est pas très joli...
    De plus j'attire votre attention sur le fait qu'il faut imposer l'échelle verticale (le deuxième [-1:1] ci-dessus) car sinon gnuplot ajuste automatiquement l'échelle et vous ne verez plus que la droite et plus votre autre graphe (sin(x) ici.)

  2. LA BONNE SOLUTION à mon avis consiste à ne pas le faire avec plot mais à mettre une arrow sans flèche (option nohead).

    Pour reprendre l'exemple précédent, cela donne :

    set arrow from 0.2,-1 to 0.2,1 nohead
    -1 et 1 sont les bornes de l'échelle en y.

    Pour enlever une arrow : set noarrow XX est son numéro (que vous pouvez avoir par show arrow si vous avez plusieurs arrows et que vous avez oublié laquelle est laquelle).

  3. Le problème de fond vient du fait que mathématiquement x=cte n'est pas une application. La "bonne" solution d'un point de vue mathématique consiste donc à la dessiner comme une courbe paramétrique. Mais cela a l'inconvénient de vous obliger à dessiner toutes vos courbes comme paramétriques...

    Sur l'exemple précédent, cela donnerait :

    set param
    plot [-1:1][-1:1][-1:1] 0.2,t ti "", t,sin(t) ti "sin(x)"

    Notez l'utilisation de l'option title (ti ici) pour donner de "bonnes" légendes au courbes.

  4. Je signale enfin pour les pros de gnuplot (mais en ont-ils besoin ?) cette dernière solution (que je trouve personnellement plus compliquée que arrow) :

    plot [-1:1][-1:1] '< echo "0.2 -1"; echo "0.2 1"' t "" w l, sin(x)
    Notez : les 2 echo pour avoir 2 points (si un de vos bords est l'axe des abscisses, on peut alors faire avec un seul echo et l'option w i (with impulse)), et surtout le t "" (title) pour enlever l'affreux titre affecté à cette droite !


Page maintenue par Jean-Cédric Chappelier (chaps@lia.di.epfl.ch)
Dernière mise à jour le 9 février 2001