Gnuplot
Gnuplot est une puissante interface pour la représentation graphique de données provenant d'un fichier texte. Il peut soit afficher l'image, soit enregistrer une image dans divers formats, y compris LaTeX.
Par exemple, dans un processus de calcul numérique, il est souvent intéressant de stocker régulièrement les paramètres principaux du schéma (erreur, résidu, n° de l'itération, différents indices, etc.). Le plus simple étant de générer un fichier texte associé au calcul, dans lequel on range les données par colonne.
Pré-requis
- Disposer des droits d'administration.
- Disposer d'une connexion à Internet configurée et activée.
Installation
Gnuplot est possiblement installé par défaut dans certaines versions Ubuntu (mais pas sous Lucid). S'il n'est pas actuellement installé sur votre PC, vous avez plusieurs méthodes. Pour une utilisation ponctuelle, préférer la première.
Depuis les dépôts
Installez le paquet gnuplot-x11 pour la console vers l'écran graphique normal.
À partir des sources
Indispensable pour pouvoir profiter des options de complétion et d'historique. C'est pour cette raison que cette doc a été écrite.
Les sources de la dernière version de gnuplot sont disponibles sur sourceforge. Cette dernière version, numérotée 4.4, apporte plusieurs nouveautés dont l'intégration d'un terminal lua/tikZ (export vers code LaTeX/tikZ destiné à être compilé via pdfLaTeX pour produire un fichier pdf) et la gestion de la transparence. Ne pas hésiter à jeter un coup d'œil à la documentation et FAQ disponibles (en anglais) sur le site officiel
Après avoir téléchargé les sources, se référer au fichier INSTALL contenu dans l'archive. Afin de bénéficier du terminal tikZ (paquet liblua5.1-0-dev nécessaire) il est important d'ajouter un lien symbolique par la commande suivante :
ln -s /usr/lib/pkgconfig/lua5.1.pc /usr/lib/pkgconfig/lua.pc
Ou bien sur un système 64-bit :
ln -s /usr/lib/liblua5.1.so /usr/lib/liblua.so
L'installation peut alors se dérouler en se plaçant dans le répertoire issu de la décompression de l'archive et en utilisant les commandes suivantes :
./configure make sudo checkinstall
Utilisation
Nous rassemblons ici quelques commandes de base pour l'utilisation de ce logiciel. Le site officiel de Gnuplot est inévitable pour un utilisateur plus exigeant.
Directement dans un terminal
Pour lancer Gnuplot, dans un terminal, taper :
gnuplot
Gnuplot se lance alors directement dans la fenêtre active du terminal, et on obtient quelque chose qui ressemble à ça :
alarat@troll:~/High_Order$ gnuplot G N U P L O T Version 4.0 patchlevel 0 last modified Thu Apr 15 14:44:22 CEST 2004 System: Linux 2.6.15-27-686 Copyright (C) 1986 - 1993, 1998, 2004 Thomas Williams, Colin Kelley and many others This is gnuplot version 4.0. Please refer to the documentation for command syntax changes. The old syntax will be accepted throughout the 4.0 series, but all save files use the new syntax. Type `help` to access the on-line reference manual. The gnuplot FAQ is available from http://www.gnuplot.info/faq/ Send comments and requests for help to <gnuplot-info@lists.sourceforge.net> Send bugs, suggestions and mods to <gnuplot-bugs@lists.sourceforge.net> Terminal type set to 'x11' gnuplot>
Si vous n'obtenez pas ça, c'est que Gnuplot n'est pas (ou est mal) installé.
Pour créer un graphe, dans cette ligne taper la commande :
plot 'adresse_du_fichier_a_ploter' using colonne_valeurs_abscisse:colonne_valeurs_ordonnee
L'option 'using' peut être raccourcie en 'u'. Par défaut, Gnuplot représente un nuage de points. Pour obtenir une ligne brisée, il faut ajouter l'option 'with lines', qui dans sa version raccourcie devient 'w l'.
Ainsi, pour afficher la ligne brisée représentant la cinquième colonne en fonction de la première colonne du fichier "Resultats", se trouvant dans le dossier père du dossier dans lequel on a lancé Gnuplot, on doit taper la commande :
plot '../Resultats' u 1:5 w l
Cet exemple peut être essayé avec ce fichier, qui représente diverses fonctions mathématiques (cette commande tracera donc la fonction exponentielle) :
- Resultats
x cos sin log exp 0 1 0 -inf 1 0.1 0.995004 0.0998334 -2.30259 1.10517 0.2 0.980067 0.198669 -1.60944 1.2214 0.3 0.955336 0.29552 -1.20397 1.34986 0.4 0.921061 0.389418 -0.916291 1.49182 0.5 0.877583 0.479426 -0.693147 1.64872 0.6 0.825336 0.564642 -0.510826 1.82212 0.7 0.764842 0.644218 -0.356675 2.01375 0.8 0.696707 0.717356 -0.223144 2.22554 0.9 0.62161 0.783327 -0.105361 2.4596 1 0.540302 0.841471 -1.11022e-16 2.71828 1.1 0.453596 0.891207 0.0953102 3.00417 1.2 0.362358 0.932039 0.182322 3.32012 1.3 0.267499 0.963558 0.262364 3.6693 1.4 0.169967 0.98545 0.336472 4.0552 1.5 0.0707372 0.997495 0.405465 4.48169 1.6 -0.0291995 0.999574 0.470004 4.95303 1.7 -0.128844 0.991665 0.530628 5.47395 1.8 -0.227202 0.973848 0.587787 6.04965 1.9 -0.32329 0.9463 0.641854 6.68589 2 -0.416147 0.909297 0.693147 7.38906
Il s'ouvre alors une nouvelle fenêtre pour l'affichage du graphique.
Maintenant, si on veut rajouter le nuage de points représentant la troisième colonne en fonction de la deuxième colonne du fichier "Nouveau_Resultats" du dossier courant, sur cette même représentation graphique, il faut taper la commande :
plot '../Resultats' u 1:5 w l, 'NouveauResultats' u 2:3
Il existe des raccourcis clavier pour activer des options directement sur la fenêtre de représentation graphique. Ainsi, si l'on tape 'l', on obtient une représentation logarithmique en ordonnée, et si l'on tape 'Maj+L', on obtient une représentation logarithmique en la coordonnée la plus proche du curseur de la souris. Pour plus d'info sur les raccourcis :
man gnuplot
Autre exemple très simple, depuis le terminal (sans fichier de configuration)
Tapez :
gnuplot
Puis :
gnuplot> reset gnuplot> set terminal png gnuplot> set output "exemple_1.png" gnuplot> set title "Mon titre" gnuplot> plot [t=-4:4] sin(t), cos (t)
Vous obtenez :
Code | Fonction mathématique | - | Code | Fonction mathématique |
---|---|---|---|---|
abs (x) | valeur absolue d’un nombre réel | - | abs (z) | module d’un nombre complexe |
acos (x) | arc cosinus | - | acosh (x) | arc cosinus hyperbolique |
arg (z) | argument d’un nombre complexe | - | asin(x) | arc sinus |
asinh (x) | arc sinus hyperbolique | - | atan (x) | arc tangente de x |
atan2 (y,x) | arc tangente de y=x | - | atanh (x) | arc tangente hyperbolique |
besj0 (x) | fonction de Bessel j0 | - | besj1 (x) | fonction de Bessel j1 |
besy0 (x) | fonction de Bessel y0 | - | besy1 (x) | fonction de Bessel y1 |
ceil (x) | valeur entière supérieure | - | cos (x) | cosinus |
cosh (x) | cosinus hyperbolique | - | erf (x) | fonction d’erreur |
erfc (x) | fonction d’erreur complémentaire | - | exp (x) | exponentielle |
floor (x) | valeur entière inférieure | - | gamma (x) | fonction gamma |
ibeta (a,b,x) | fonction beta incomplète | - | igamma (a,x) | fonction gamma incomplète |
imag (z) | partie imaginaire d’un nombre complexe | - | int (x) | valeur entière tronquée vers 0 |
inverf (x) | fonction d’erreur réciproque | - | invnorm (x) | fonction quantile de la loi normale N (0; 1) |
lambertw (x) | fonction W de Lambert | - | lgamma (x) | log de la valeur absolue de la fonction gamma |
log (x) | logarithme népérien | - | log10 (x) | logarithme décimal |
norm (x) | fonction de répartition de la loi normale N (0; 1) | - | pi | nombre π (3,14…) |
rand (x) | nombre au hasard | - | real (z) | partie réelle d’un nombre complexe |
sgn (x) | fonction signe | - | sin (x) | sinus |
sinh (x) | sinus hyperbolique | - | sqrt (x) | racine carrée |
tan (x) | tangente | - | tanh (x) | tangente hyperbolique |
Code | Convention |
---|---|
x, y | Coordonnées cartésiennes, pour de la 2D |
x, y, z | Coordonnées cartésiennes, pour de la 3D |
r | Coordonnées polaires, pour le rayon vecteur |
t | Coordonnées polaires, pour l'angle vecteur (compris entre [0:2*pi]) |
u | Coordonnées paramétriques, pour une courbe |
u, v | Coordonnées paramétriques, pour une surface |
Avec un fichier de configuration
En fait Gnuplot est un logiciel extrêmement puissant pour la représentation de données, puisqu'il est conçu pour être lancé à partir de scripts. On peut donc dans un fichier de configuration, rentrer des lignes de commandes Gnuplot qui permettent d'effectuer des actions en cascades sur un même fichier de données.
il est possible de donner un nom aux axes et un titre au graphique en envoyant la commande :
gnuplot load nom_du_fichier_config
Ce fichier pourrait par exemple contenir :
set terminal jpeg set output "Gnuplot5.jpg" set title ' Flux en fonction du temps: ' set xlabel ' Temps (jj/mm)' set ylabel ' Flux ' set xdata time set timefmt "%Y-%m-%d" set xtics format "%d-%m" set style fill transparent solid 0.5 noborder plot "flux.dat" using 1:2 with lines,\ "flux.dat" using 1:3 with boxes lc rgb"green"
Créer le fichier de données (l'extension n'a pas d'importance) :
- flux.dat
2014-11-10 151 105 2014-11-11 140 91 2014-11-12 148 91 2014-11-13 158 114 2014-11-14 144 96 2014-11-15 169 106 2014-11-16 184 112 2014-12-01 157 106 2014-12-08 120 86 2014-12-10 130 89 2014-12-12 147 8
Exemple pour la fonction paramétrique
- gnuplot2.gnu
reset set terminal png set parametric set output "essai3.png" set grid xtics ytics set samples 300 plot sin(4*t), cos(6*t)
puis :
gnuplot gnuplot> load "gnuplot2.gnu"
Autre exemple de graphique (avec double axe X et Y)
Créer les fichiers :
- LR.dat
# mois température moyenne (°C) Ensoleillement(H) - sources données : http://www.infoclimat.fr Jan 5,9 84 Fév 6,9 111 Mar 8,7 174 Avr 11,1 212 Mai 14,3 239 Jun 17,5 272 Jui 19,8 305 Aou 19,6 277 Sep 17,8 218 Oct 14,2 167 Nov 9,4 107 Déc 6,6 85
- gnuplot3.gnu
reset set terminal png set output "La Rochelle.png" set title textcolor rgb "blue" "Données météorologiques de La Rochelle de 1961 à 1990\n(données issues de http://www.infoclimat.fr)" set key outside below; set key title "Légende"; set key box reverse; set key box lw 2 lc 4 # Légende set grid # Grille de fond set label 1 textcolor rgb "orange" "305 heures" at 2,20 centre; set arrow 1 from 3.5,20 to 6,19.2 # Info set xtics textcolor rgb "green" border ("Jan" 0, "Fév" 1, "Mar" 2, "Avr" 3, "Mai" 4,"Jun" 5,"Jui" 6, "Aou" 7,"Sep" 8,"Oct" 9,"Nov" 10,"Déc" 11) # Mois sur axe des x set x2range [-1:12]; set x2tics textcolor rgb "green" border ("1" 0, "2" 1, "3" 2, "4" 3, "5" 4,"6" 5,"7" 6, "8" 7,"9" 8,"10" 9,"11" 10,"12" 11) # Chiffres sur axe des x2 set ytics textcolor rgb "red"; set ylabel textcolor rgb "red" "T. moyennes" # Colorisation set y2label textcolor rgb "orange" "E. moyen"; set y2tics textcolor rgb "orange"; set y2range [70:350]# Colorisation + échelle axe y2 set style fill transparent solid 0.3# Colorisation plot [-1:12] [4:22] "LR.dat" using 3 axes x1y2 title "Ensoleillement (h/mois)" with boxes lc rgb "yellow",\ "LR.dat" using 2 title "Températures (°C)" with linespoints lc rgb "red"
Sauvegardez les fichiers, puis
gnuplot gnuplot> load "gnuplot3.gnu"
Autre exemple pour un graphique 3D colorisé
mais pour les graphiques en 3D, il faut utiliser : "splot xxxx xxxxx"
et pour imprimer plusieurs graphiques sur une même page, renseigner : "multiplot xxxx xxxxx".
Fichier avec données :
- mon_fichier.gnu
reset set terminal png set output "essai1.png" # Nom du fichier de sortie set title textcolor rgb "red" "Mon exemple" # Titre du graphique, de couleur rouge set xlabel "Mes données 1" # Nom de l'axe x set ylabel textcolor rgb "green" "Mes données 2" #Nom de l'axe y, de couleur verte set zlabel offset +5,+4 "Mes données 3" # Nom de l'axe z et repositionnement au-dessus r(x,y)=sqrt(x**2+y**2) f(x,y)=sin(r(x,y))/r(x,y) set pm3d # Colorisation de la surface set hidden3d # Masquage du quadrillage set isosamples 80,80 # Dimensionnement des entre-axes de la surface splot f(x,y) with pm3d at s # Création du graphique 3D, avec splot
Puis :
gnuplot gnuplot> load "mon_fichier.gnu"
À partir d'un programme en C
Voici un exemple en deux fichiers, l'un pour le code C :
- gnuplot.c
#include <stdio.h> #include <stdlib.h> #define GNUPLOT_PATH "/usr/bin/gnuplot" int main() { FILE *gp; gp = popen(GNUPLOT_PATH, "w"); if(gp == NULL){ fprintf(stderr, "Oops, I can't find %s.", GNUPLOT_PATH); exit(EXIT_FAILURE); } fprintf(gp, "cd '~/Desktop'\n load \"config\"\n"); fflush(gp); /* On oublie pas le buffer. */ getchar(); pclose(gp); exit(EXIT_SUCCESS); }
Dans la 7eme ligne de main, on demande à gnuplot d'exécuter des instructions. D'abord il change de répertoire, puis il charge le fichier config.
Vous aurez compris que config est l'autre fichier, il contient des instructions gnuplot. Par exemple :
- config
# fichier modèle d'utilisation de gnuplot # vous pouvez aussi l'utiliser simplement en faisant en ligne de commande : # gnuplot monfichier set terminal X11 set size 0.8,0.8 set nokey set xrange [-0.1:10] #set yrange [0:110] M=3 k=3 plot (1-exp(-k*x)) pause -1 "Faire retour" # permet d'attendre que l'utilisateur ait vu la figure quand on fait une sortie X11
Les lignes commençant par # sont des commentaires. Copiez ce fichier sur votre bureau et appelez-le config.
À partir d'un programme en Python
Il faut utiliser le module http://gnuplot-py.sourceforge.net/
Exemple de génération d'un PNG contenant 3 courbes en utilisant la fonction _add_to_queue :
- gnuplot.py
#!/usr/bin/python from numpy import * import Gnuplot, Gnuplot.funcutils g = Gnuplot.Gnuplot(debug=1) a = Gnuplot.Data(([1,1], [2,2], [3,3]),title="A") b = Gnuplot.Data(([1,1], [2,4], [3,9]),title="B") c = Gnuplot.Data(([1,0.5], [2,1], [3,1.5]),title="C") g('set output "/tmp/myGraph.png"') g('set terminal png small ') l = [] for i in (a,b,c): l.append(i) g._add_to_queue(l) g.replot()
Complétion Bash et historique
Démarche
Ces deux options ne sont pas mises par défaut dans Ubuntu, car Gnuplot est disponible sous une licence spéciale, qui interdit sa distribution après modification. Il serait ainsi illégal de mettre ici un lien vers un paquet compilé à partir des sources de Gnuplot. Par contre, ce tuto est tout à fait autorisé, et vous avez le droit de suivre ses instructions pour une utilisation personnelle du logiciel !
Pour activer la complétion et l'historique de Gnuplot en mode terminal, il vous faudra télécharger les sources du logiciel, puis les compiler avec les options nécessaires, en faisant bien attention aux dépendances requises. Vous obtiendrez alors un nouveau paquet qu'il vous suffira d'installer sur votre distribution. Enfin, il faudra bloquer la version de votre nouveau Gnuplot, afin que vos gestionnaires de mises à jour ne détruisent pas votre travail à chaque mise à niveau.
Sources
Tout d'abord, si ce n'est pas déjà fait, ajouter le dépôt-source universe dans vos dépôts.
On peut maintenant obtenir les sources du logiciel. Se placer dans /usr/local/src (ceci n'est pas obligatoire) et y télécharger les sources de Gnuplot :
cd /usr/local/src sudo apt-get source gnuplot
Nouveau paquet Gnuplot
Tout d'abord, installer la bibliothèque readline et les dépendances qui permettront de compiler le paquet Gnuplot avec les options de complétion et d'historique : installez les paquets libreadline5 libreadline5-dev ibxt-dev libgd2-noxpm-dev debhelper texinfo tetex-bin tetex-extra.
Puis aller dans le répertoire /etc/apt/src/gnuplot-*.*.*/debian/ (les étoiles correspondant à la version) :
cd /usr/local/src/gnuplot-*.*.*/debian/
Éditer le fichier rules.
et remplacer l'option –without-gnu-readline par –with-readline=gnu. Ceci active la complétion. Pour l'historique, ajouter dans la même ligne l'option : –enable-history-file.
On obtient ainsi le paragraphe :
config.status: configure dh_testdir # Add here commands to configure the package. ./configure $(confflags) CFLAGS="$(CFLAGS)" \ --prefix=/usr --mandir=\$${prefix}/share/man \ --infodir=\$${prefix}/share/info \ --datadir=\$${prefix}/share/gnuplot \ --libexecdir=\$${prefix}/lib/gnuplot \ --with-readline=gnu --enable-history-file --without-lasergnu \ --with-png --with-gd --without-lisp-files \ --without-linux-vga --with-gihdir=\$${prefix}/share/gnuplot
Remonter dans le dossier père et compiler le paquet :
cd .. sudo dpkg-buildpackage
Il est tout à fait possible qu'il vous manque encore des dépendances. Dans ce cas, le compilateur stoppe au bout de très peu de temps. Il vous suffit alors de lire attentivement les messages d'erreurs pour savoir quelles dépendances vous manquent, les installer, et recompiler. La compilation prend quelques minutes (selon les architectures…). Merci de signaler d'éventuelles difficultés.
Installer le nouveau paquet
Remonter encore d'un dossier et installer le nouveau paquet :
cd .. sudo dpkg -i gnuplot-*.deb
Les fichiers .deb sont les fichiers du nouveau paquet Gnuplot. Conservez-les précieusement, car Gnuplot rentre désormais en conflit avec vos gestionnaires de mises à jour. En effet, ils considèrent que votre nouvelle version de Gnuplot est antérieure à celle disponible dans les dépôts. Il est possible que par une fausse manipulation vous remettiez à jour Gnuplot. Vous perdriez alors la complétion et l'historique. Vous pourrez les remettre en service grâce à :
cd /usr/local/src/ sudo dpkg -i gnuplot-*.deb
Bloquer les mises à jour
Voici une solution possible pour geler le paquet gnuplot à son état actuel. Il existe certainement d'autres manières, peut-être plus simples. Merci d'en faire profiter tout le monde.
Jusqu'à hardy, poser un 'hold' sur les paquets Gnuplot dans aptitude ou Synaptic, ne résoud pas le problème : gnuplot-nox apparait systématiquement dans le gestionnaire de mise-à-jour (quel qu'il soit). La solution : dselect.
Il n'y a pour l'instant pas de doc sur dselect sur ce site web, c'est pourquoi la méthode ci-dessous reste encore assez mystérieuse.
Dans un terminal, taper :
sudo dselect
On obtient l'interface suivante :
Debian `dselect' package handling frontend. 0. [A]ccess Choose the access method to use. 1. [U]pdate Update list of available packages, if possible. * 2. [S]elect Request which packages you want on your system. 3. [I]nstall Install and upgrade wanted packages. 4. [C]onfig Configure any packages that are unconfigured. 5. [R]emove Remove unwanted software. 6. [Q]uit Quit dselect. Move around with ^P and ^N, cursor keys, initial letters, or digits; Press <enter> to confirm selection. ^L redraws screen. Version 1.13.11 (i386). Copyright (C) 1994-1996 Ian Jackson. Copyright (C) 2000,2001 Wichert Akkerman. This is free software; see the GNU General Public Licence version 2 or later for copying conditions. There is NO warranty. See dselect --licence for details.
- Se placer sur la ligne 2. (avec les flèches directionnelles ou en tapant sur 'S').
- Taper 'Entrée'.
- Taper sur la barre d'espace pour quitter l'aide.
Vous êtes maintenant dans le gestionnaire de paquet dselect :
- Taper '/' (Maj+'/') pour effectuer une recherche
- Rechercher 'gnuplot'
- La touche 'n' permet de se déplacer d'un package contenant la chaine de caractère 'gnuplot' à un autre. Se déplacer jusqu'à ces trois lignes :
─────── Up-to-date Optional packages in section universe/math ─────── *** Opt universe gnuplot 4.0.0-2.1 4.0.0-2.1 A command-line driven interactive plotting program *** Opt universe gnuplot-nox 4.0.0-2.1 4.0.0-2.1 A command-line driven interactive plotting program *** Opt universe gnuplot-x11 4.0.0-2.1 4.0.0-2.1 X11-terminal driver for gnuplot
Les trois étoiles en début de ligne marquent l'état d'installation des packages. Il s'agit maintenant de les bloquer à la mise à jour.
- Se placer sur chacune des lignes et taper « = ». Cette action « hold » les packages à leur version actuelle
- On obtient alors :
─────── Up-to-date Optional packages in section universe/math ─────── *== Opt universe gnuplot 4.0.0-2.1 4.0.0-2.1 A command-line driven interactive plotting program *== Opt universe gnuplot-nox 4.0.0-2.1 4.0.0-2.1 A command-line driven interactive plotting program *== Opt universe gnuplot-x11 4.0.0-2.1 4.0.0-2.1 X11-terminal driver for gnuplot
Il faut maintenant quitter dselect :
- Taper « Entrée ».
- Normalement, on arrive dans l'aide qui vous demande de taper sur « space » pour quitter. Taper sur la barre d'espace.
- Taper à nouveau sur « Entrée ».
- On est revenu au menu initial. Descendre à la ligne 6. par les flèches ou en tapant « Q ».
- C'est gagné. Normalement, aucun des gestionnaires de mise à jour n'accepte de mettre Gnuplot à jour.
Quelques exemples (différentes possibilités)
- essai5.gnu
reset set terminal jpeg set output "essai5.jpg" set key off set xrang [0:10] set yrang [0:10] set style line 12 lt rgb "blue" set style fill solid 0.6 set object 1 rectangle at 1,1 size 8,2 fc rgb "yellow" set object 2 circle at 4,6.2 radius 2 fc rgb "orange" front set object 3 ellipse at 6,2.5 size 3,8 angle 40 fc rgb "blue" set object 4 polygon from 8.6,4 to 8.6,8 to 8.2,8 to 9.2,9.6 \ to 10,8 to 9.6,8 to 9.6,4 to 8.6,4 plot NaN
Source Wikipédia (licence domaine publique)
Voir aussi
- (en) Le site officiel
- (fr) Cours sur Gnuplot
- (fr) Tutoriel Gnuplot lien inaccessible, le 2/03/2018
Contributeur : laden.