Bienvenue visiteur (Inscription |  Connexion)
Qui est en ligne ?
Il y a : 24 utilisateurs en ligne, consultez le détail
Auteur Message
stanislas
#0 Message posté le : 10-12-2006 à 11:27:51


Jedi


Forum : Administrateur
Association : Membre fondateur
Arrivé(e) le : 08-05-2003
Nombre de messages : 4345


Ce document n'a pas pour ambition de détailler le fonctionnement complet de gnuplot: cela est pratiquement impossible. Il s'agit plutôt, à l'aide de quelques exemples, d'en montrer la philosophie, pour que ceux que ça intéresse puisse alors apprendre par eux-mêmes.

1. Installation :



Gnuplot est proposé avec la plupart des distributions Linux existantes, et existe pour d'autres plateformes. Pour Linux: on l'installe en suivant la procédure classique d'installation d'un nouveau paquetage, en fonction de sa distribution, si on possède les CD d'installation.
Pour ceux qui ne les ont pas, et pour les autres OS, on peut télécharger gnuplot par exemple ICI.

Dorénavant, je supposerai que gnuplot est utilisé sous Linux ; les adaptations pour d'autres OS devraient être minimes.

2. Utilisation :



Dans une console, taper 'gnuplot' . L'invite change pour devenir 'gnuplot>',ce que je résumerai dorénavant en '>'; les commentaires sont précédés de '#', et peuvent être saisis eux aussi. gnuplot se présente comme un langage interprété; on entre donc des commandes qui sont alors prises en compte au fur et à mesure de leur saisie ; on peut remonter l'historique comme en ligne de commande shell. Des commandes peuvent être enchaînées avec ';'. L'environnement se quitte avec 'exit'.

2.1 Premier exemple :



On désire tracer la courbe représentative de la fonction f définie par f(x)=3x(x-1)(x+1).
#définit la fonction
>f(x)=3*x*(x-1)*(x+1)
#trace la courbe dans une nouvelle fenêtre; observer le résultat
>plot f(x)


Le résultat étant un peu « sec », adaptons la situation à nos besoins :
#intervalles en x et y
>set xrange [-2:2] ; set yrange [-5:5]
#les axes de coordonnées doivent être tracés en style de ligne 1 (trait plein)
>set xzeroaxis 1 ; set yzeroaxis 1
# l'axe des y doit être gradué de 1 en 1
>set ytics 1
# les graduations des axes de coordonnées doivent être sur ces axes
>set xtics axis ; set ytics axis
# trace une trame
>set grid
# supprime le cadre extérieur
>set noborder
# titre; remarquer le '\n' pour passer à la ligne
>set title "Tuto gnuplot\nExemple 1"


On peut alors retracer:
# retrace
>replot


Remarque: à chaque étape, on peut invoquer 'replot' pour voir l'effet de chaque commande.

2.2 Utilisation des tests sous GnuPlot :



Il existe une structure de test sous GnuPlot, dont la syntaxe générique est :
>(condition ? conséquence_si : conséquence_sinon)


Elle est toute indiquée pour des fonctions dont les valeurs sont conditionnelles (définies par intervalles par exemple) ; les deux exemples ci-dessous définissent deux fonctions f et g respectivement ; f(x)=x² si x est dans l'intervalle [-3;5] et zéro ailleurs, alors que g(x) vaut cos(x) si x est dans ]-3;5[, 0.5*x si x est dans [5;7] et zéro partout ailleurs.
> f(x)= (x> -3 && x5 ? x*x : 0)
> g(x)= (x> -3 && x5 ?cos(x) : (x>=5 && x=7 ? 0.5*x :0))
# noter qu'on imbrique ici deux tests


2.3 Exemple de courbe paramétrée :


Cela se fait très simplement, tenant compte du fait que la variable devient t :
> set parametric
> plot sin(5*t), cos(4*t)


2.4 Exemple de courbe en coordonnées polaires :


> set polar
> plot 3*sin(t)/t


2.5 Exemple de surface :



Cette fois, l'idée est de tracer une surface (S), mettons celle d'équation z=sin(x)+2cos(y). Je suppose que cela se fait dans une session différente de la précédente :
>f(x,y)=sin(x)+2*cos(y)
# pour ne pas l'oublier...
>set title "Tuto gnuplot\nExemple 2"
# premier tracé: résultat déjà agréable
>splot f(x,y)


Adaptons un peu:
>set xrange [-5:5] ; set yrange [-5:5] ; set zrange [-3:3]
>set grid
>replot


On peut raffiner :
# enlève l'effet de transparence; pour annuler: set nohidden3d
>set hidden3d
>replot


Remarques : sur les versions les plus récentes de gnuplot, l'annulation d'un paramétrage peut se faire par la commande 'unset' ; ainsi 'set nohidden3d' devient 'unset hidden3d' ou 'set noborder' devient 'unset border', par exemple.
Par ailleurs, des surfaces paramétrées sont possibles (voir ce que gnuplot annonce après un 'set parametric'), mais dépasse le carde actuel de ce didactitciel.

Revenons à (S): on peut aussi, c'est visiblement utile, forcer un pas plus fin :
# pas fixé à 30 en x et y
>set isosamples 30,30
>replot


Pour placer des lignes de niveau :
#trace la surface (S), et les plans d'équations z=-3 et z=0
>splot f(x,y), -3, 0


Pour mieux situer les axes, nous allons placer des légendes :
>set xlabel "axes des x"; set ylabel "axe des y" ; set zlabel "axe des z"
>replot



3. Sortie vers fichier :



Quand on a obtenu un graphique visuellement à son goût, on peut vouloir l'intégrer à un document LaTeX par exemple. Pour cela, on joue sur la sortie ('term') que va utiliser gnuplot.
Par défaut, la sortie est la sortie standard 'x11'. Pour en changer:
>set term [nom_de_la_sortie] {options}


Toutes les possibilités sont expliquées en invoquant :
>help set term


Admettons qu'avec ce qui précède on veuille créer :
  • un fichier ps
  • un fichier eps (pour l'intégrer à un document LaTeX)
  • du code LaTeX direct

Il va falloir rediriger le tracé vers un fichier adéquat.

Première possibilité :
>set term postscript {options éventuelles}
>set output "/chemin/nom_du_fichier"
>replot


Le fichier est créé et utilisable pour d'autres applications.

Pour de l'eps :
>set term postscript eps {options supplémentaires éventuelles}


Le reste de la procédure est identique ...

Pour du code LaTeX :
>set term latex


Le reste de la procédure est là aussi identique.

Pour revenir à la sortie standard :
>set term x11

4. Sortie vers imprimante :


>set term postscript
>set output "| lp"
>replot


5. Fichier pré-existant / Sauver le travail fait :



Un tracé gnuplot se présente sous la forme d'une suite d'instructions décrivant l'image à obtenir; on peut aussi en faire un fichier à l'avance, qui sera lu et exécuté par :
>load "nom_du_fichier"


Pour ceux qui veulent faire du copier/coller avec ce tuto par exemple...
Inversement :
>save 'nom_du_travail'


permet de sauvegarder la suite d'instructions décrivant le graphique obtenu. En observant le fichier ainsi obtenu, on comprend aussi indirectement la manière de fonctionner de gnuplot.

6. Tracé d'une courbe « implicite » :


Il s'agit ici de tracer dans le plan une courbe dont l'équation f(x,y)=0 est telle qu'elle ne peut pas s'exprimer aisément sous forme classique y=f(x)
Un des exemples les plus simples est le cercle de centre O et de rayon 1, dont l'équation peut s'écrire x²+y²-1=0 ; à vous d'adapter à vos besoins pour d'autres courbes.

Ceci nécessite l'utilisation combinée et judicieuse de plusieurs des techniques décrites ci-dessus ; à noter que cette méthode n'est pas de moi, et que vais essayer prochainement d'en retrouver la source, par correction.

Nous allons donc procéder avec un fichier 'fimpli.gnu' par exemple, qui sera exécuté par
> load 'fimpli.gnu'
Voici le fichier pour le cercle :
f(x,y) = x**2+y**2-1
set contour base
set isosamples 2000,2000
set cntrparam levels discrete 0.0
set nosurface
set term table
set out 'curve.dat'
splot f(x,y)
set out
set term pop
plot 'curve.dat' w l


L'idée est de considérer qu'une telle courbe (ici un cercle) est l'intersection dans l'espace d'une surface bien choisie avec le plan d'équation z=0.
En fait, on a stocké dans un fichier temporaire les deux premières coordonnées des points correspondants, et on demande enfin à gunplot de placer ces points.


7. Pour aller plus loin... :



Nous n'en sommes qu'au début...

Deux repères :




--Message édité par stanislas le 10-12-2006 à 11:27:51--


-------------------------------------
Quand le dernier arbre aura été abattu, et le dernier animal exterminé, les hommes se rendront compte que l'argent ne se mange pas.