Utiliser PGPLOT pour du graphique interactif sous Linux

ArticleCategory: [Choose a category, translators: do not translate this, see list below for available categories]

Applications

AuthorImage:[Here we need a little image from you]

[bayboraseckin]

TranslationInfo:[Author + translation history. mailto: or http://homepage]

original in en Baybora Baran and Seckin Gokaltun

en to fr Paul Delannoy

AboutTheAuthor:[A small biography about the author]

Nous sommes deux assistants de recherche � l'Institut d'Informatique de l'universit�d'ITU. Nous r�alisons des applications d'ing�nierie et nous utilisons Linux pour cela... La page personnelle de Seckin se trouve �� www.be.itu.edu.tr/~seckin

Abstract:[Here you write a little summary]

Cet article va vous apprendre comment ��crire un programme graphique interactif en Fortran. PGPlot est l'ensemble des sous-programmes n�cessaires � l'utilisation du code Fortran. Nous allons d�crire leur installation et l'�criture de quelques exemples. Deux de ces exemples seront analys�s, ainsi que leur code Fortran, ce qui vous donnera une id�e des applications que vous pourrez r�aliser avec PgPlot.

ArticleIllustration:[One image that will end up at the top of the article]

[PgPlot pour Linux]

ArticleBody:[The main part of the article]

Introduction

Qu'est-ce que PGPLOT?

La biblioth�que de programmes graphiques PGPLOT est un outil logiciel graphique utilisable en Fortran ou en C, ind�pendant des p�riph�riques, qui permet de r�aliser des graphes scientifiques simples. Il est con�u pour permettre la cr�ation de graphiques de qualit� et publiables avec un minimum d'efforts. Dans la plupart des cas le programme peut �tre ind�pendant du p�riph�rique et ses sorties sont dirig�es vers le p�riph�rique appropri� lors de son ex�cution.

La biblioth�que PGPLOT se compose de deux grandes parties : l'une concerne ce qui est ind�pendant du p�riph�rique, l'autre concerne ce qui est d�pendant du p�riph�rique et propose un ensemble de pilotes, sous-programmes effectuant les sorties sur diff�rents terminaux, ��crans d'affichage, imprimantes � aiguilles ou � jet d'encre, imprimantes laser, et traceurs de courbes. Les format de fichiers les plus r�pandus sont support�s, y compris PostScript et GIF. PGPLOT elle-m�me est �crite en Fortran-77 standard.

Les routines PGPLOT peuvent ��tre invoqu�es directement dans un programme Fortran-77 ou Fortran-90. Une biblioth�que d'interface en C (cpgplot) et un fichier d'en-t�te (cpgplot.h) sont fournis afin d'assurer les transferts lors d'appels depuis un programme en C ou C++; cette biblioth�que effectue les conversions n�cessaires entre C et Fortran. PGPLOT a �t�test� sous UNIX (plusieurs vari�t�s, dont Linux, SunOS, Solaris, HPUX, AIX, et Irix) et OpenVMS.

PGPLOT n'est pas dans le domaine public. Pourtant il est disponible librement pour des usages non-commerciaux. Le code source et la documentation, ainsi qu'un petit nombre de routines sp�cifiques �� certains syst�mes, sont la propri�t� du California Institute of Technology (CalTech). Pour disposer du fichier et des instructions d'installation cliquez ici.

Quelques exemples

Ci-dessous quelques exemples d'application de PGPLOT afin de montrer ses capacit�s.

Exemple 1) Nuage de points :
[Exemple1]

Exemple 2) Graphe de fonction :
[Exemple2]

Exemple 3) Contours :
[Exemple3]

Exemple 4) Images :
[Exemple4]

Exemple 5) Histogrammes:
[Exemple5]

Installation pour un syst�me Unix

Note : On parle ici de deux r�pertoires, le r�pertoire de distribution (source) qui devra contenir l'arborescence des sources de PGPLOT et le r�pertoire cible dans lequel vont �tre cr��s les biblioth�ques propres aux machines, les fichiers de donn�es, et les programmes de d�monstration. Il est recommand� de cr�er des r�pertoires, vides dans ce but. Ils ne doivent pas��tre identiques. Ci-dessous dans les exemples, ces r�pertoires sont nomm�s

/usr/local/src/pgplot (r�pertoire de distribution)
/usr/local/pgplot (r�pertoire cible)

mais vous pouvez choisir d'autres noms. Ce n'est pas courant mais les privil�ges root ne sont pas n�cessaires pour installer PGPLOT, il suffit d'avoir le droit d'�criture dans ces r�pertoires. Le m�me r�pertoire de distribution peut servir pour l'installation de plusieurs binaires de PGPLOT destin�s � des architectures distinctes, mais dans des r�pertoires cibles diff�rents.

L'installation sous Linux est ici pr�sent�e bri�vement, si vous avez des questions compl�mentaires vous pouvez envoyer un courrier �lectronique � tjp(At)astro.caltech.edu

Copier le fichier de distribution

Copiez le fichier de distribution par ftp anonyme depuis Caltech. Faites un ftp (user: anonymous, password: votre@adresse de courrier �lectronique) sur ftp.astro.caltech.edu. Le fichier de distribution est une archive UNIX tar compress�e par gzip. Voici les commandes ftp n�cessaires � la r�cup�ration du fichier :

cd pub/pgplot
binary
hash
get pgplot5.2.tar.gz

Les fichiers texte �voqu�s ici sont �galement inclus dans l'archive tar.

Ce fichier peut��galement �tre obtenu depuis l'URL ftp://ftp.astro.caltech.edu/pub/pgplot/pgplot5.2.tar.gz.

D�compresser les fichiers

Utilisez gunzip et tar pour d�compresser l'archive et extraire son contenu. Cela va cr�er le r�pertoire pgplot (et ses sous-r�pertoires) dans le r�pertoire courant. Assurez-vous donc que le r�pertoire courant est bien celui o� vous voulez cr�er l'arborescence de distribution de PGPLOT.

cd /usr/local/src
gunzip -c pgplot5.2.tar.gz | tar xvof -

Cet exemple cr�e /usr/local/src/pgplot et ses sous-r�pertoires.

Cr�er le r�pertoire cible

Cr�ez un r�pertoire avec droit d'�criture, dans lequel seront plac�s la biblioth�que PGPLOT et ses fichiers associ�s. Un tel r�pertoire est n�cessaire pour chaque combinaison syst�me d'exploitation-compilateur ("syst�me cible") pour lequel vous souhaitez installer PGPLOT, par exemple :

mkdir /usr/local/pgplot

N'essayez pas de cr�er la biblioth�que PGPLOT dans le r�pertoire de distribution.

S�lection des pilotes de p�riph�riques

Vous allez configurer PGPLOT en choisissant les p�riph�riques dans la liste propos�e. Copiez le fichier drivers.list du r�pertoire de distribution vers le r�pertoire cible, puis utilisez un �diteur de texte pour choisir les pilotes. Chaque pilote de p�riph�rique disponible figure dans une ligne du fichier : l'abscence de point d'exclamation (!) au d�but de la ligne active le pilote, par contre sa pr�sence le d�sactive. Plusieurs d'entre eux sont sp�cifiques � un syst�me d'exploitation (voir les notes dans drivers.list), aussi n'activez que les p�riph�riques que vous utiliserez vraiment. PGPLOT pourra �tre reconfigur� plus tard en reprenant l'installation � cette �tape. Vous devrez souvent inclure : le p�riph�rique null (/NULL), des imprimantes PostScript (/PS, /VPS, /CPS, et /VCPS), des terminaux Tektronix (/TEK, /XTERM, et d'autres variantes), et, si le syst�me cible dispose du X Window System, les pilotes X Window (/XWINDOW, /XSERVE). Vous pouvez aussi inclure les pilotes pour les fichiers GIF (/GIF, /VGIF) ou d'autres imprimantes.
    cd /usr/local/pgplot
    cp /usr/local/src/pgplot/drivers.list .
    vi drivers.list  (ou votre �diteur favori)

Cr�er le fichier makefile

L'installation sous UNIX de PGPLOT utilise un script, nomm� makemake, pour g�n�rer un fichier makefile UNIX standard pour votre syst�me, vos compilateurs, et les p�riph�riques PGPLOT choisis. L'information sur le syst�me et le compilateur est fournie par un fichier de configuration. Des fichiers de configuration sont disponibles pour les syst�mes qui suivent. Si le votre n'est pas dans la liste, ou si vous rencontrez des probl�mes pour cr�er le makefile, vous trouverez ci-dessous la fa�on de cr�er votre propre fichier de configuration.

Notez que chaque fichier de configuration est �tabli pour UN compilateur donn� fonctionnant sur UN syst�me d'exploitation donn�. Si, par exemple, sur votre syst�me, la commande f77 appelle le compilateur GNU g77, vous ne pouvez pas utiliser le fichier de configuration d'un compilateur SPARC f77, par exemple. Vous aurez � cr�er un fichier de configuration particulier. Dans le tableau suivant, Arg#2 est le code correspondant au syst�me d'exploitation, et Arg#3 est le code correspondant aux compilateurs Fortran et C. Vous obtiendrez des informations suppl�mentaires sur les syst�mes support�s en lisant le fichier pgplot/sys_*/aaaread.me, o� * d�signe une des valeurs possibles de Arg#2.
    Arg#2   Arg#3
    ------  ------
    aix     xlf_cc
    alliant fortran_cc
    bsd     g77_gcc
    convex  fc_cc
    cray    cf77_cc
    epix2   f77_cc         (Control Data EP/IX 2.x)
    freebsd f77_cc
    fujitsu uxpm_frt_cc
    fujitsu uxpv_frt_cc
    hp      fort77_c89
    hp      fort77_gcc
    irix    f77_cc
    linux   absoft_gcc
    linux   f77_gcc
    linux   g77_elf
    linux   g77_gcc
    next    af77_cc
    next    f2c_cc
    next    g77_cc
    next    gf77_cc
    osf1    f77_cc
    osf1    f77_cc_shared
    sol2    f77_cc         (Solaris 2.x, SunOs 5.x)
    sol2    f77_gcc
    sol2    f90_cc
    sol2    g77_gcc
    sun4    f77_acc        (SunOS 4.x)
    sun4    f77_cc
    sun4    f77_gcc
    ultrix  f77_cc
Si votre syst�me est dans la liste, faites comme suit : faites du r�pertoire cible votre r�pertoire courant par d�faut, comme ceci,
    cd /usr/local/pgplot
Ex�cutez le script makemake depuis le r�pertoire de distribution :
    /usr/local/src/pgplot/makemake  /usr/local/src/pgplot  linux
Le premier argument donn� � makemake est le nom du r�pertoire de distribution. Notez que lorsque vous lancez makemake, le r�pertoire courant par d�faut doit �tre le r�pertoire cible, c-�-d. le r�pertoire dans lequel vous voulez mettre les biblioth�ques compil�es.

Le second argument est le nom du syst�me d'exploitation (Arg#2 dans la table pr�c�dente); si vous l'omettez ou si vous choisissez un nom erron�, makemake vous donnera la liste des valeurs admises. Sur certains syst�mes, qui proposent plusieurs compilateurs Fortran ou C, un troisi�me argument est n�cessaire (Arg#3 dans la table pr�c�dente); il est compos� des noms des deux compilateurs r�unis par un caract�re de soulignement. Si vous l'omettez, makemake vous donnera la liste des valeurs admises.

M�me si vos arguments sont les bons, makemake peut encore se plaindre de ne pas trouver la liste des pilotes actifs (drivers.list). Reprenez � l'�tape 4!

Exemple

baybora@bilgi>../pgplot/makemake ../pgplot linux g77_gcc
For additional information, read file ../pgplot/sys_linux/aaaread.me
Reading configuration file: ../pgplot/sys_linux/g77_gcc.conf
Selecting uncommented drivers from ./drivers.list
Found drivers NUDRIV PSDRIV XWDRIV
Creating make file: makefile
Determining object file dependencies.

Le script makemake g�n�re un fichier makefile qui sera utile plus tard, un fichier Fortran grexec.f charg� des appels aux pilotes s�lectionn�s, et un fichier texte rgb.txt qui contient les codes couleur n�cessaires � la routine PGSCRN. (Si un tel fichier rgb.txt existait auparavant, avec vos propres d�finitions de couleurs, makemake ne le modifierait pas.) Il copie aussi deux fichiers en-t�te en Fortran n�cessaires � la compilation. Ainsi, � ce stade, vous devriez au moins avoir les fichiers :

drivers.list
grexec.f
grpckg1.inc
makefile
pgplot.inc
rgb.txt

V�rifiez qu'ils ont bien �t� cr��s et que la liste des pilotes que makemake d�clare avoir trouv� est bien identique � celle indiqu�e dans drivers.list. Si votre UNIX n'est pas dans la liste des syst�mes support�s ci-dessus, cr�ez votre propre fichier de configuration dans le r�pertoire cible, en le nommant local.conf. Le mieux est de copier un des fichiers fournis (dans pgplot/sys_*/*.conf), et de l'�diter en suivant les commentaires pr�sents dans ce fichier. La proc�dure makemake utilisera local.conf s'il existe dans le r�pertoire courant, et si vous ne sp�cifiez pas de valeur pour Arg#3. Mais Arg#2 est toujours n�cessaire (OS).

Taper `make' pour compiler le code

La commande UNIX make va compiler le code de la biblioth�que PGPLOT en s'appuyant sur les donn�es du fichier makefile :

make

Par d�faut, make g�n�re : une biblioth�que module-objet, libpgplot.a; une biblioth�que partag�e (si le syst�me le supporte), le fichier binaire de polices PGPLOT grfont.dat, les programmes de d�monstration pgdemo*, et un fichier de documentation pgplot.doc. De plus, si les pilotes /XWINDOW et/ou /XSERVE ont �t� activ�s � l'�tape 4, le programme pgxwin_server sera cr��, et si le pilote /XDISP a �t� activ�, le programme pgdisp sera cr��. Si cette �tape se termine correctement, vous pouvez taper

make clean

pour effacer les fichiers interm�diaires devenus inutiles. Vous auriez alors au moins dans votre r�pertoire courant :

drivers.list
grexec.f
grfont.dat (fichier binaire de polices)*
libpgplot.a (biblioth�que PGPLOT)*
libpgplot.so (biblioth�que partag�e, sous r�serve)*
makefile
pgdemo1 ... pgdemo16 (programmes de d�monstration)
pgdisp (n�cessaire au pilote /XDISP)*
pgplot.doc (fichier ASCII de documentation)
pgxwin_server (n�cessaire au pilote /XWINDOW)*
rgb.txt (base de donn�es des noms de couleurs)*

Si vous avez activ� XMDRIV ou TKDRIV, certains des fichiers suivants seront l� aussi:

pgmdemo (programme de d�mo ex�cutable)
libXmPgplot.a (biblioth�que objet n�cessaire aux applications PGPLOT/Motif)*
XmPgplot.h (fichier en-t�te n�cessaire aux applications PGPLOT/Motif)*
libtkpgplot.a (biblioth�que objet n�cessaire aux applications PGPLOT/Tk)*
pgtkdemo (programme de d�mo ex�cutable)
pgtkdemo.tcl (script n�cessaire au programme de d�mo)
tkpgplot.h (fichier en-t�te n�cessaire aux applications PGPLOT/Tk)*

Pour d�placer PGPLOT dans un autre r�pertoire, vous devez y copier au minimum les fichiers indiqu�s par un ast�risque (*). Le fichier de documentation contient les descriptions des routines PGPLOT, elles sont aussi fournies dans le manuel.

Ex�cuter les programmes de d�monstration

Ex�cutez les programmes de d�monstration sur vos p�riph�riques afin de v�rifier qu'ils fonctionnent de mani�re satisfaisante. Avant toute ex�cution d'un programme utilisant PGPLOT, vous devez v�rifier que la variable PGPLOT_DIR est correctement d�finie. C'est le nom du r�pertoire dans lequel PGPLOT va chercher les fichiers grfont.dat et rgb.txt (� moins que les variables PGPLOT_FONT et PGPLOT_RGB n'aient re�u des valeurs destin�es�� modifier ce comportement), et, si n�cessaire, le programme X Window server pgxwin_server :

UNIX csh or tcsh: setenv PGPLOT_DIR /usr/local/pgplot/
UNIX sh or bash: PGPLOT_DIR="/usr/local/pgplot/"; export PGPLOT_DIR

Il n'est pas n�cessaire, mais pratique, de d�finir un p�riph�rique par d�faut pour PGPLOT avec la variable PGPLOT_DEV, par exemple :

UNIX csh or tcsh: setenv PGPLOT_DEV /xwindow

Si vous utilisez une biblioth�que partag�e sous UNIX (par ex. sous Solaris 2.x), vous devrez sans doute aussi inclure le r�pertoire PGPLOT dans votre chemin de recherche, d�fini par la variable d'environnement LD_LIBRARY_PATH. Pour lancer un programme, tapez son nom (avec le r�pertoire si le r�pertoire courant n'est pas dans votre chemin de recherche) :

./pgdemo1

Tous ces programmes de d�mo demandent un p�riph�rique et son type. Tapez un point d'interrogation ? pour avoir la liste des pilotes disponibles et v�rifier ainsi que PGPLOT est bien configur�. Points � v�rifier : le programme PGPLOT lit correctement les polices et affiche correctement les exposants, les indices et les caract�res sp�ciaux (pgdemo2) ; le programme PGPLOT lit correctement les d�finitions de couleurs (pgdemo10) ; sur les p�riph�riques interactifs, le curseur est bien g�r� (pgdemo5, pgdemo6).

Comment compiler votre code ?

Apr�s l'installation de la biblioth�que PGPLOT, vous pouvez utiliser ses routines dans votre propre code Fortran, comme ci-dessous :
      PROGRAM EX1
      INTEGER PGOPEN, I
      REAL XS(9), YS(9), XR(101), YR(101)

C Calcule les coordonn�es des points � tracer.

      DO 10 I=1,101
          XR(I) = 0.1*(I-1)
          YR(I) = XR(I)**2*EXP(-XR(I))
 10   CONTINUE
      DO 20 I=1,9
          XS(I) = I
          YS(I) = XS(I)**2*EXP(-XS(I))
 20   CONTINUE

C Ouvre le p�riph�rique graphique.

      IF (PGOPEN('?') .LT. 1) STOP

C D�finit l'�tendue du graphe (0 < x < 10, 0 < y < 0.65),
C et trace les axes.

      CALL PGENV(0., 10., 0., 0.65,  0,  0)

C Etiquette les axes (notez l'usage de \u et \d pour les exposants).

      CALL PGLAB('x', 'y', 'PGPLOT Graph: y = x\u2\dexp(-x)')

C Trace le graphe.

      CALL PGLINE(101, XR, YR)

C Place des symboles aux points choisis.

      CALL PGPT(9, XS, YS, 18)

C Ferme le p�riph�rique graphique.

      CALL PGCLOS

      END

Ceci affichera le graphique ci-dessous :

[exemple]

Pour que ce code s'ex�cute correctement, vous devrez lier la biblioth�que PGPLOT et les biblioth�ques X11 dans votre code source. Le script suivant fait cette liaison :

g77 your_code_name.f -L/X11directory/ -lX11 -L/PGPLOTdirectory/ -lpgplot

Lors de l'ex�cution les fichiers suivants doivent �tre dans le r�pertoire courant :

grfont.dat
rgb.txt
pgwin server
Il suffit de les copier du r�pertoire pgplot vers le r�pertoire dans lequel vous ex�cutez votre code.

Application 1: Cercle passant par 3 points

Notre but est de saisir les coordonn�es de 3 points indiqu�s par des clics de souris, puis de laisser le code Fortran tracer le cercle qui passe par ces 3 points. Ce probl�me �tait une consigne donn�e par le Dr.Serdar Celebi (mscelebi(at)itu.edu.tr) lors du cours de "G�om�trie Computationnelle" que nous suivions.

Les routines suivantes d�finissent l'�tendue et le fond de la zone dans laquelle vont figurer les trac�s suivants. Leur usage est d�taill� dans le manuel PGPLOT. (voir le lien vers la page de PGPLOT � la fin)

..
...
call PGSCR(0,1.0,1.0,1.0) !fixe les codes couleur
call PGENV(-50.0,50.0,-50.0,50.0,1,1) !d�finit fen�tre et �tendue, dessine le cadre et son �tiquette
call PGSCI(1) !fixe la couleur
call PGSFS(2) !fixe le style 'remplissage'
...
..

La routine utilis�e, PGPT1, place un pointeur au point d�sign� par la souris.

..
... 
WRITE (*,*) 'Mode curseur :', MODE
             GOTO 10
          END IF
           CALL PGPT1(X, Y, 3)  !trace un marqueur
        ic=ic+1    
        xp(i)=x
        yp(i)=y

Apr�s avoir marqu� 3 points dans l'�cran, le code Fortran calcule le centre puis trace le cercle qui passe par les 3 points.




    ..
    ...
    c-----trouve le rayon---------------
     r=(xcenter-xp(1))**2+(ycenter-yp(1))**2
     r=r**0.5
    c-----trace le cercle-------------------
     call PGCIRC(xcenter,ycenter,r) !trace un cercle
     goto 1
    ...
    ..
    

Nous tra�ons le cercle avec cette routine, "PGCIRC". Vous pouvez alors effacer le cercle pr�-dessin� puis donner trois autres points et effectuer le trac� dans la m�me zone. Le code complet figure dans les r�f�rences (cf. R�f. circle.f).

Application 2: Tracer� des "�pines de porc-�pic" sur une courbe d'approximation

Nous voulons tracer une courbe d'approximation d'un nuage de points marqu�s � la souris dans l'�cran, puis tracer sur cette courbe des lignes droites en '�pines'.

Les �pines de porc-�pic sont des lignes que l'on utilise pour d�tecter des points d'inflexion, des parties 'plates' de la courbe, et des discontinuit�s dans sa courbure. C'est ce qui rend leur usage important en "G�om�trie Computationnelle".

Nous avons d�velopp� un code pour calculer une courbe d'un degr� donn� (entre 1 et 4) par la m�thode des moindres carr�s appliqu�e �� un ensemble de points d�sign�s par l'utilisateur dans l'interface graphique gr�ce � la souris. Il donne la possibilit� d'ajouter des '�pines' (avec une fr�quence ajustable par l'utilisateur) sur la courbe afin de visualiser sa courbure.

Sans entrer dans les d�tails de ce code (vous le trouverez � la fin de l'article) voici les r�sultats graphiques obtenus.

D'abord nous marquons les points � la souris et le code stocke leurs coordonn�es dans un tableau. Puis il calcule la courbe du degr� demand� (entre 1 et 4) par l'utilisateur.



On trace alors les �pines sur la courbe. Leur nombre peut �tre donn� par l'utilisateur et le nouvel ensemble est trac� sur la m�me courbe.




La fr�quence des �pines peut �tre augment�e comme montr� ci-dessous. Le programme peut aussi tracer une nouvelle courbe sur le m�me ensemble de donn�es.



Conclusion

Nous avons voulu montrer qu'il est possible d'installer une biblioth�que graphique interactive, PGPLOT, sous Linux et combien l'�tendue des possibilit�s offertes est grande. Cet ensemble de routines vous apporte une r�elle ind�pendance et vous fera gagner du temps si un affichage de r�sultats est n�cessaire � chaque ex�cution de votre code. Inclure ces routines dans votre code en rend l'exploitation robuste et rapide.

R�f�rences