Chapitre 3
Gnuplot
Le langage C ne permet pas directement de dessiner des courbes et de tracer des plots. Il faut pour cela
stocker rsultats dans des fichier, et, dans un deuxime temps utiliser un autre logiciel qui va lire ces fichiers
et tracer les courbes correspondantes. Il existe de nombreux logiciels qui permettent de soccuper de ces
taches (grce, xmgrace, gnuplot...). Ce chapitre est ddi au dessin scientifique avec Gnuplot.
3.1 Lancer Gnuplot
Gnuplot se lance depuis un terminal avec la commande :
>gnuplot
On peut lancer gnuplot en lui demandant dexcuter un ensemble dinstructions crite dans un fichier (par
exemple [Link]) en utilisant la commande
>gnuplot [Link]
Pour garder gnuplot ouvert aprs lexcution de toutes ces instructions, il est prfrable dutiliser la syntaxe :
>gnuplot [Link] -persist
Lorsque gnuplot est ouvert, on a accs un nouveau prompt gnuplot> dans lequel on peut taper des
commandes interprtes par gnuplot. On peut par exemple lancer lexcution des instructions du mme
fichier en tapant :
gnuplot>load "[Link]"
Sinon, la commande la plus simple pour faire un plot y(x) lorsque x et y ont t enregistrs en deux colonnes
dans une fichier [Link] est :
gnuplot>plot "[Link]"
Mais Gnuplot de trs nombreuses possibilits dont voici un petit rsum...
3.2 Options des graphes
Avant de tracer un graphe, il est possible de rgler un certain nombre de de proprits par dfaut. On
rgle toutes les valeurs des paramtre en utilisant la commande set suivie du nom du paramtre et de sa
valeur. On peut galement revenir aux rglages initiaux grce unset. Voici une liste des proprits les plus
frquentes que lon peut tre amen rgler :
19
Universit Paul Sabatier 2014-2015 CHAPITRE 3. GNUPLOT
set size ratio 1 spcifie le ratio x/y pour la taille du graphe (set size square)
set autoscale met en marche lautoscale
set autoscale fix force les chelles sajuster exactement
set xrange [0:20] fixe lchelle en x et annule lautoscale (idem pour y et z)
set key 2,45 ache la lgende aux coordonnes (x=2,y=45)
set title "Mon Titre" spcifie la lgende du graphe
set notitle supprime la lgende (quivalent unset key)
set xlabel "titre x" fixe le nom de laxe x (idem pour y et z)
set logscale x fixe une chelle log pour laxe x (idem pour y, z, xy, xy, yz, xyz...)
set logscale x e fixe lchelle log en base "e" (idem pour 10 ou toute autre base)
set label "texte" at 3,5 ache du texte aux coordonnes (x=3,y=5)
unset label eace tous les textes achs
set lmargin at screen 0.3 rgle la marge gauche 30% de la taille totale du graphe
set rmargin at screen 0.3 idem pour la marge droite
set tmargin at screen 0.3 idem pour la marge en haut
set bmargin at screen 0.3 idem pour la marge en bas
set mapping cartesian met en coordonnes cartsiennes (idem pour spherical et cylindrical)
Certaines de ces options peuvent galement tre spcifies directement avec la commande plot (voir ci-aprs).
3.3 Les plot 2D : y = f (x)
On peut utiliser la fonction plot pour tracer des graphes simples 2D, soit partir dune fonction dfinie
avec gnuplot, soit partir dun fichier de donnes.
3.3.1 Options gnrales
La fonction plot admet beaucoup doptions donc certaines sont dcrites ici :
title "mon titre" spcifie un titre pour la lgende
with dots trace avec des points
with points trace avec des symbole (plus, croix...)
with lines trace avec des lignes
with linespoints trace avec des points et des lignes
with impulses trace avec des droites verticales
with errorbars trace avec des points et des barres derreur
linewidth 1.5 paissit le trait dun facteur multiplicatif 1.5
pointtype 3 utilise le symbole 3 (entre 0 et 13) quand points est specifi
pointsize 1.6 grossit le symbole dun facteur multiplicatif 1.6
linecolor rgb "couleur" utilise une couleur prdfinie (show colornames liste des couleurs prdfinies)
linetype 3 utilise le types prdfini 3 (entre -1 et 8) qui regroupe plusieurs proprits
3.3.2 Tracer une fonction
set isosample 100 fixe un nombre de points n=100 pour la variable x
f(x)=sin(x) dfinit une fonction f
plot f(x) trace la fonction f(x)
20
CHAPITRE 3. GNUPLOT Universit Paul Sabatier 2014-2015
3.3.3 Tracer des donnes
La commande de base pour reprsenter des donnes contenues dans un fichier est : plot "fichier"
Formattage du fichier
De manire gnrale, les lignes du fichier de donnes qui commencent par le symbole # ne sont pas lues.
Dautre part, pour que gnuplot puisse lire correctement les fichiers de donnes, ceux-ci doivent tre
formats correctement et respecter un certain nombre de rgles. La plus importante est que gnuplot ne sait
interprter que des colonnes. Les jeux de donnes doivent donc toujours tre rangs en colonnes dans les
fichiers.
Le fichier le plus simple lire contient un tableau de n valeurs ranges sous la forme dune unique
colonne. Mais on peut aussi stocker plusieurs tableaux en utilisant plusieurs colonnes, ce qui implique la
forme suivante 1 :
# x y z ...
x1 y1 z1 ...
x2 y2 z2 ...
... ... ... ...
xn yn zn ...
Les fichiers peuvent aussi contenir plusieurs blocs de donnes contenant chacun une ou plusieurs co-
lonnes 2 . Ces blocs doivent tre rangs les uns la suite des autres, et doivent tre spars par 2 lignes
blanches :
# bloc 0 :
x01 y01 z01 ...
x02 y02 z02 ...
... ... ... ...
x0n y0n z0n ...
# bloc 1 :
x11 y11 z11 ...
x12 y12 z12 ...
... ... ... ...
x1n y1n z1n ...
# bloc 2 :
x21 y21 z21 ...
x22 y22 z22 ...
... ... ... ...
x2n y2n z2n ...
1. Par dfaut, et sans option particulire, gnuplot trace uniquement la 2e colonne en fonction de la premire (mme si
dautres colonnes sont prsentes). Si une seule colonne est prsente, il trace ce jeux de donnes en fonction de leur indice.
2. Par dfaut, gnuplot superpose les premires courbes (2e colonne en fonction de la premire) de tous les blocs et trace
donc autant de courbes que de blocs.
21
Universit Paul Sabatier 2014-2015 CHAPITRE 3. GNUPLOT
Tracer plusieurs courbes
On peut spcifier une colonne lire en particulier en rajoutant une option la commande plot :
plot "fichier" using 1:3 trace la colonne 3 en fonction de la colonne 1
plot "fichier" using (2*$1):(log($2)) trace le log de la 2e colonne en fonction de 2x la 1re
plot "fichier" using 1:column(2*2) trace la 4e colonne en fonction de la premire
plot "fichier1", "fichier2" trace les colonnes 2 en fonction de 1 pour 2 fichiers
plot "fichier" u 1:2, "" u 1:3 trace les colonnes 2 et 3 en fonction de la 1
plot "fichier" index 4 ne trace que les courbes du 5e bloc
plot "fichier" every :2::10::20 trace les courbes des blocs 10 20 par pas de 2
Lorsque beaucoup de colonnes doivent tre lues, il peut devenir judicieux dutiliser la commande for. En
voici quelques exemples dutilisation :
plot for [i=2:5] "fichier" using 1:i+1 : trace les colonnes 2 5 en fonction de la premire
plot for [i=1:10:2] "fichier" u i:i+1 : trace les colonnes 2-11 en fonction de la prcdente, par pas
de 2
plot for [i=1:10:2] "fichier" using i:(column(i+1)+3*i) : idem, mais en dcalant chaque fois les
courbes de 3 units vers le haut, ce qui est joli...
liste="fichier1 fichier2 fichier3"
plot for [file in liste] file using 1:2
Trace les 2e colonnes en fonction des premires pour tous les fichiers lists
filename(n) = spring("file_%[Link]",n)
plot for [i=1:10] filename(i) using 1:2
Dfinit une fonction qui retourne de nom de fichier index, et trace les courbes lues dans ces fichiers.
Limiter le nombre de points tracer
Lorsque lon a de trs gros fichiers, et beaucoup de courbes tracer, il est parfois intressant de ne pas
tracer tous les points dune colonne donne. On peut faire un slection grce loption every :
plot "[Link]" every i:j:k:l:m:n : trace les points ne correspondant quaux lignes de chaque bloc
entre les lignes k et la m, par pas de i, et aux blocs de donnes entre les blocs l et n, par pas de j. Par
exemple :
plot "[Link]" every 2 trace un point sur deux
plot "[Link]" every ::100::200 ne trace que les points entre 100 et 200
plot "[Link]" every 2::100::200 ne trace que les points entre 100 et 200 par pas de 2
3.4 Les plots 3D : z = f (x, y)
De mme que pour les plots 2D, on peut tracer des plots 3D de fonctions dfinies dans gnuplot ou de
donnes enregistres dans un fichier. Dans les deux cas, la commande est : splot.
3.4.1 Options gnrales
En 3D, on peut tracer 3 types de graphes : les courbes, les contours et les surfaces. On peut choisir une
reprsentation, lautre, ou en superposer plusieurs.
On peut rgler lorientation du graphe avec :
set view 10,30 rgle langle de visualisation 3D 10,30
set view map rgle langle 0,0 (vue du dessus)
22
CHAPITRE 3. GNUPLOT Universit Paul Sabatier 2014-2015
Surfaces
set surface trace la grille dfinissant la surface
set pm3d at ss trace les valeurs en code de couleurs sur la surface elle-mme (b pour en bas, t pour en haut)
set pm3d map tracer une carte 2D en codes de couleurs (vue du dessus)
set hidden3d nache pas les zones qui sont caches pour langle de vue donn
set colorbox ache la barre de couleur
Contours
set contour surface trace les contours sur la surface elle-mme
set contour base trace les contours en dessous de la surface
set contour both tracer les contours sur et sous la surface
set cntrparam levels auto 20 trace 20 niveaux
set cntrparam levels incremental -5,1,5 trace les niveaux entre -5 et 5 par pas de 1
set cntrparam levels discrete -.5,0,5 trace les niveaux 5,0,5
set clabel ache les valeurs des contours
Toutes ces options peuvent tre dsactives avec unset.
3.4.2 Tracer une fonction
set isosample 100,200 dfinit des nombre de points 100 et 200 pour deux variables (x,y)
f(x,y)=cos(x*x+y*y) dfinit une fonction de 2 variables
splot f(x,y) trace cette fonction
3.4.3 Tracer des donnes
La commande pour tracer les donnes est : splot "[Link]".
Et on peut slectionner les colonnes tracer avec : splot "fichier" u 1:2:3 qui trace par exemple la
colonne 3 en fonctions des colonnes 1 et 2.
Pour les surfaces et les contours, le fichier doit cependant tre format correctement. Pour un jeux de
donnes qui contient les valeurs dun rsultat z(x, y) pour nx valeur de la variable x et ny valeurs de la
variable y, le fichier doit tre constitu de nx blocs, contenant chacun 3 colonnes. La premire colonne doit
contenir la ny fois la valeur de x pour le bloc considr. Le deuxime colonne contient le tableau des ny
valeurs de y, et la troisime colonne les valeurs de z. Les blocs ne doivent pas tre spars de plus de 1 ligne
blanche.
3.4.4 Matrices
Lorsquaucune opration un peu technique nest requise, on peut utiliser une manire alternative pour
tracer une carte en couleur. Il sagit de la commande :
plot "[Link]" nonuniform matrix with image
Il faut alors que le fichier soit format de la manire suivante :
n x01 x02 x03 ... x0n
y01 F11 F12 F13 ... F1n
y02 F21 F22 F23 ... F2n
y03 F31 F32 F33 ... F3n
... ... ... ... ... ...
y0m Fm1 Fm2 Fm3 ... Fnm
23
Universit Paul Sabatier 2014-2015 CHAPITRE 3. GNUPLOT
o la premire ligne contient les valeurs de x et la premire colonne les valeurs de y.
3.4.5 Palettes de couleur
Dans ces cas, il peut tre intressant de choisir la palette de couleurs utiliser. Il existe plusieurs moyen
de dfinir des palettes de couleurs. En voici quelques uns :
set palette rgbformulae 33,13,10 (essayer aussi 22,13,-31 ou 22,0,-22 par exemple)
set palette defined (-.4 "blue",0 "light-grey", 1. "red")
3.5 Sauvegarder des images
Pour enregistrer une image, il faut excuter deux tapes : choisir le type dimage gnrer (eps, gif...) et
choisir le nom du fichier (si les drivers ne sont pas installs, ces terminaux ne sont pas accessibles).
set term ache tous les types de sorties possibles. Parmi eux :
set term postscript eps enhanced color dirige les sorties vers un fichier postscript avec plusieurs op-
tions
set term tgif dirige les sorties vers un fichier gif
set term gif animate dirige les sorties vers un fichier gif anim (version 4.6 uniquement)
set term png dirige les sorties vers un fichier png (version 4.6 uniquement)
set term x11 redirige les sorties vers une fentre de lcran
set output "fichier" nomme le fichier de sortie
3.6 Animations
Il est galement possible de raliser des animation ( lcran ou dans un fichier). Le fichier de donnes
doit alors tre format pour contenir un bloc de donnes correspondant chaque instant de lanimation. Il
faut faire quelques rglage et appeler un script :
set xrange [0:10] supprime lautoscale
imax=100 spcifie le nombre de pas de temps de lanimation
i=0 initialise lindice de boucle
load "[Link]" appelle un script qui va se charge de la boucle
Ce script doit contenir les instructions suivantes 3 :
plot "fichier" index i trace ltape i (contenue dans le bloc i)
pause 0.2 ralentit un peu lexcution
i=i+1 incrmente le pas de temps
if (i<=imax) reread retourne au dbut du script tant quon a pas fini
Si les donnes ne sont pas enregistres en blocs mais en colonnes, on peut faire pareil, en adaptant la
syntaxe de linstruction plot.
Pour sauvegarder une animation avec les versions rcentes de gnuplot, on peut utiliser le terminal "gif
animate". Sinon, il faut stocker les images dans des fichiers dirents, et les ouvrir avec un logiciel adapt.
3. si on met pause -1, il faut taper return pour continuer.
24