Débuter avec MATLAB

nextpreviouscontents
Suivant: il n'y en a pas Précédent:Programmer sous Matlab
Voir:  Table des matièreIndex - Accueil


Graphisme


Gestion des fenêtres graphiques

Une instruction graphique ouvre une fenêtre dans laquelle est affiché le résultat de cette commande. Par défaut, une nouvelle instruction graphique sera affichée dans la même fenêtre et écrasera la figure précédente. On peut ouvrir une nouvelle fenêtre graphique par la commande figure. Chaque fenêtre se voit affecter un numéro n. Ce numéro est visible dans le bandeau de la fenêtre sous forme d'un titre. Le résultat d'une instruction graphique est par défaut affiché dans la dernière fenêtre graphique ouverte qui est la fenêtre graphique active. On rend active une fenêtre graphique précédemment ouverte en exécutant la commande figure(n), où n désigne le numéro de la figure. La commande close permet de fermer la fenêtre graphique active. On ferme une fenêtre graphique précédemment ouverte en exécutant la commande close(n), où n désigne le numéro de la figure. Il est également possible de fermer toutes les fenêtres graphiques en tapant close all. La figure 4 représente la fenêtre graphique numéro 1 où est affiché le graphe de la fonction cosinus entre 0 et , résultat de la commande fplot('cos',[0 2*pi]). L'apparence de la fenêtre graphique peut varier légèrement suivant le système informatique utilisé.
 

Figure 4: Fenêtre graphique et résultat de la commande fplot('cos',[0 2*pi]).

Graphisme 2D

Tracer le graphe d'une fonction; la commande fplot

La commande fplot permet de tracer le graphe d'une fonction sur un intervalle donné. La syntaxe est:

fplot('nomf', [xmin , xmax])


Illustrons par des exemples les trois façons d'utiliser la commande fplot. On obtient le graphe de la fonction incorporée sinus entre  et  par l'instruction:
fplot('sin',[-2*pi 2*pi]).

Pour tracer le graphe de la fonction h(x) = x sin(x) entre $-2 \pi $ et , on peut définir la fonction utilisateur h dans le fichier h.m de la manière suivante (attention de bien lire x.*sin(x) et non pas x*sin(x)):

function y=h(x)

y=x.*sin(x);
On obtient alors le graphe de la fonction h par l'instruction: fplot('h', [-2*pi 2*pi]).
L'autre façon de procéder est d'exécuter l'instruction (là on a le choix entre écrire x.*sin(x) ou x*sin(x)):fplot('x*sin(x)', [-2*pi 2*pi]).
Dans les deux cas on obtient le dessin représenté à la figure 5.
 

Figure 5: Graphe de la fonction h(x) = x sin x entre $-2 \pi $ et $2 \pi $.


 

Il est possible de tracer plusieurs fonctions sur la même figure. Il faut pour cela utiliser la commande fplot de la manière suivante:

fplot('[nomf_1 , nomf_2 , nomf_3]', [xmin , xmax])

nomf_1, nomf_2, nomf_3 est soit le nom d'une fonction MATLAB incorporée, soit une expression définissant une fonction de la variable x, soit le nom d'une fonction utilisateur.
 

Il est également possible de gérer les bornes des valeurs en ordonnées. Pour limiter le graphe aux ordonnées comprises entre les valeurs ymin et ymax on passera commesecond argument de la commande fplot le tableau [xmin, xmax, ymin, ymax]. Une autre possibilité pour gérer les bornes des valeurs en ordonnées est d'utiliser la commande axis après utilisation de la commande fplot. La syntaxe est axis([xmin, xmax, ymin, ymax]).
 

Voici un exemple dont le résultat est affiché à la figure 6:

>> fplot('[sin(x)/x , cos(x)/x]', [-5, 5, -1, 1])
>>
On comprend très vite l'intérêt de gérer les bornes des valeurs en ordonnées si l'on exécute la commande fplot('cos(x)/x', [-5, 5]) pour tracer le graphe de la fonction  cos(x)/x  entre -5 et 5. La figure, qui n'est pas vraiment esthétique, n'est pas reproduite ici (-:.
 

Figure 6: Graphe des fonctions  cos(x)/x et sin(x)/x entre -5 et 5.

La commande plot

La commande plot permet de tracer un ensemble de points de coordonnées (xi , yi), i=1, ..., N. La syntaxe est plot(x,y)x est le vecteur contenant les valeurs xi en abscisse et y est le vecteur contenant les valeurs yi en ordonnée. Bien entendu les vecteurs x et y doivent être de même dimension mais il peut s'agir de vecteurs lignes ou colonnes. Par défaut, les points (xi , yi) sont reliés entre eux par des segments de droites.

Voici par exemple une autre façon de tracer le graphe de la fonction h(x) = x sin(x) entre $-2 \pi $ et $2 \pi $,

>> x=[-2*pi:0.01:2*pi]; y = x.*sin(x);
>> plot(x,y)
>>
Essayez aussi
>> x=[-2*pi:1:2*pi]; y = x.*sin(x);
>> plot(x,y)
>>
Dans cet exemple on a défini un vecteur x de valeurs équi-réparties entre $-2 \pi $ et $2 \pi $ (avec un pas de 0.01 dans le premier cas et de 1 dans le deuxième cas) et on a calculé l'image par la fonction h de ces valeurs (vecteur y). On affiche les points de coordonnées (x(i), y(i)).
 

On peut spécifier à MATLAB quelle doit être la couleur d'une courbe, quel doit être le style de trait et/ou quel doit être le symbole à chaque point (xi , yi). Pour cela on donne un troisième paramètre d'entrée à la commande plot qui est une chaîne de 3 caractères de la forme 'cst' avec c désignant la couleur du trait, s le symbole du point et t le type de trait. Les possibilités sont les suivantes:
 
jaune  point  trait plein 
magenta  cercle  pointillé court 
cyan  marque x  pointillé long 
rouge  plus  -.  pointillé mixte 
vert  étoile 
bleu  carré 
blanc  losange 
noir triangle (bas) 
triangle (haut) 
triangle (gauche) 
triangle (droit) 
pentagone 
hexagone 

Les valeurs par défaut sont c = b, s = . et t = - ce qui correspond à un trait plein bleu reliant les points entre eux. Il n'est pas obligatoire de spécifier chacun des trois caractères. On peut se contenter d'en spécifier un ou deux. Les autres seront les valeurs par défaut. La commande grid permet d'obtenir un quadrillage de la figure, voir par exemple la figure 6.
 

Il est possible de tracer plusieurs courbes sur la même figure en spécifiant plusieurs tableaux x1, y1, x2, y2, ..., comme paramètres de la commande plot. Si l'on souhaite que les courbes aient une apparence différente, on utilisera des options de couleurs et/ou de styles de traits distincts après chaque couple de vecteurs x, y.
 

Voici un exemple dont le résultat est affiché à la figure 7. On trace sur l'intervalle [-5, 5] la fonction x² cos(x) en trait plein bleu et la fonction x cos(x) en trait pointillé rouge.

>> x = [-5:0.01:5];
>> y = x.^2.*cos(x); z = x.*cos(x);
>> plot(x,y,'b-',x,z,'r:'); 
>>


Figure 7: Résultat de la commande plot(x,y,'b-',x,z,'r:').

Voici un autre exemple amusant (la commande whitebg permet de passer la fenêtre graphique en inverse vidéo).

>> N=200;
>> x = rand(1,N); y = rand(1,N);  
>> plot(x,y,'bd'), whitebg
>>

La commande loglog

Si x et y sont deux vecteurs de même dimension, la commande loglog(x,y) permet d'afficher le vecteur log(x) contre le vecteur log(y). La commande loglog s'utilise de la même manière que la commande plot. Voici un exemple dont le résultat est affiché à la figure 8. Quelle est la pente de la droite?
>> x = [1:10:1000]; y = x.^3;
>> loglog(x,y)
>>


Figure 8: Résultat de la commande loglog(x,y).

Améliorer la lisibilité d'une figure

Légender une figure

Il est recommandé de mettre une légende à une figure. La commande xlabel permet de mettre un texte en légende sous l'axe des abscisses. La syntaxe est

xlabel(' légende ')

pour obtenir le mot légende en légende. La commande ylabel fait de même pour l'axe des ordonnées. La commande title permet de donner un titre à la figure. La syntaxe est

title(' le titre')

pour obtenir comme titre le titre. On peut aussi écrire un texte donné à une position précise sur la figure grâce à la commande text. La syntaxe est text(posx,posy,' un texte ')posx et posy sont les coordonnées du point (dans le système associé au dessin) où doit débuter l'écriture du texte un texte. La commande gtext permet quant à elle de placer le texte à une position choisie sur la figure à l'aide de la souris. La syntaxe est gtext(' un texte '). Une mire, que l'on déplace en utilisant la souris, apparaît. Il suffit d'un << clic-souris >> pour que le texte apparaisse à la position sélectionnée.
 

Il est possible avec ces commandes d'afficher une valeur contenue dans une variable au milieu de texte. Pour cela on construit un tableau de type chaîne de caractères en convertissant la valeur contenue dans la variable en une chaîne de caractères grâce à la commande num2str. Par exemple, supposons que la variable numex contienne le numéro de l'exemple traité, disons 5. On obtiendra pour titre de la figure Exemple numero 5 par l'instruction: title(['Exemple numero ', num2str(numex)]).

L'exemple suivant dont le résultat est affiché à la figure 9 illustre l'utilisation des différentes commandes permettant de légender une figure.

>> P = 5;
>> t = [0:.01:2];
>> c = 12*exp(-2*t) - 8*exp(-6*t);
>> plot(t,c); grid
>> xlabel('temps en minutes')
>> ylabel('concentation en gramme par litre')
>> title(['evolution de la concentration du produit ', num2str(P), ...
    ' au cours du temps '])
>> gtext('concentration maximale')   
>>


 
 

Figure 9: Exemple de légendage d'une figure.

\includegraphics[scale=0.7]{gr1520.ps}

Afficher plusieurs courbes dans une même fenêtre

Il est possible d'afficher plusieurs courbes dans une même fenêtre graphique grâce à la commande hold on. Les résultats de toutes les instructions graphiques exécutées après appel à la commande hold on seront superposés sur la fenêtre graphique active. Pour rétablir la situation antérieure (le résultat d'une nouvelle instruction graphique remplace dans la fenêtre graphique le dessin précédent) on tapera hold off. Voici un exemple d'utilisation de la commande hold on. Le résultat est présenté à la figure 10.
>> e = exp(1);
>> figure
>> hold on
>> fplot('exp',[-1 1])
>> fplot('log',[1/e e])
>> plot([-1:0.01:e],[-1:0.01:e])
>> grid
>> hold off
>>


Figure 10: Superposition de plusieurs courbes dans la même fenêtre graphique.

 

On dispose donc de deux façons de superposer plusieurs courbes sur une même figure. On peut soit donner plusieurs couples de vecteurs abscisses/ordonnées comme argument de la commande plot, soit avoir recours à la commande hold on. Suivant le contexte on privilégiera l'une de ces solutions plutôt que l'autre.

Il est possible de décomposer une fenêtre en sous-fenêtres et d'afficher une figure différente sur chacune de ces sous-fenêtres grâce à la commande subplot. La syntaxe est

subplot(m,n,i)

L'exemple suivant dont le résultat apparaît à la figure 11 illustre l'utilisation de la commande subplot.
>> figure
>> subplot(2,3,1), fplot('cos',[0 4*pi]), title('cosinus'), grid
>> subplot(2,3,2), fplot('sin',[0 4*pi]), title('sinus'), grid
>> subplot(2,3,3), fplot('tan',[-pi/3 pi/3]), title('tangente'), grid
>> subplot(2,3,4), fplot('acos',[-1 1]), title('arc-cosinus'), grid
>> subplot(2,3,5), fplot('asin',[-1 1]), title('arc-sinus'), grid
>> subplot(2,3,6), fplot('atan',[-sqrt(3) sqrt(3)]), title('arc-tangente'), grid
>>


 

Figure 11: Fenêtre graphique décomposée en sous-fenêtres

Sauvegarder une figure

La commande print permet de sauvegarder la figure d'une fenêtre graphique dans un fichier sous divers formats d'images. La syntaxe de la commande print est:

print -f<num> -d<format> <nomfic>

Graphisme 3D

Tracer les lignes de niveau d'une fonction de 2 variables

La commande contour permet de tracer les lignes de niveau d'une fonction de 2 variables réelles. Cette fonction peut être définie par une expression MATLAB (par exemple x.*exp(-x.^2-y.^2)), ou être définie comme une fonction utilisateur. Pour tracer les lignes de niveau de la fonction g(x,y) pour xmin< x < xmax et ymin< y < ymaxon procède de la manière suivante: Ainsi pour tracer les lignes de niveau de la fonction f(x,y) = x e-(x2+y2) sur le domaine [-2 , 2] x [-2 , 2] en prenant un maillage de maille de longueur h=0.2, on exécute:
>> [X,Y] = meshgrid(-2:.2:2, -2:.2:2);
>> Z = X.*exp(-X.^2-Y.^2);
>> contour(X,Y,Z)
>>
On peut également écrire une fonction utilisateur g.m,
function x3 = g(x1,x2)

x3 =  x1.*exp(-x1.^2-x2.^2);
et exécuter
>> [X,Y] = meshgrid(-2:.2:2, -2:.2:2);
>> Z = g(X,Y);
>> contour(X,Y,Z)
>>
Dans les 2 cas on obtient le résultat présenté à la figure 12.
 

Figure 12: Exemple de visualisation des lignes de niveau par la commande contour.

\includegraphics[scale=0.7]{gr1358.ps}

 

Le nombre de lignes de niveau est déterminé de manière automatique à partir des valeurs extrêmes prises par la fonction sur le domaine considéré. Pour imposer le nombre n de lignes de niveau à afficher, il suffit d'appeler la fonction contour avec la valeur n comme quatrième paramètre, contour(X,Y,Z,n).

Il existe deux manières d'afficher les valeurs des lignes de niveau sur la figure. Si l'on souhaite afficher les valeurs pour toutes les lignes de niveau, on utilise la commande clabel de la manière suivante:

>> [C,h] = contour(X,Y,Z,n)
>> clabel(C,h)
Si l'on souhaite afficher uniquement les valeurs de quelques lignes de niveau, on utilise la commande clabel de la manière suivante:
>> [C,h] = contour(X,Y,Z,n)
>> clabel(C,h,'manual')
On peut alors grâce à la souris sélectionner les lignes de niveau pour lesquelles on souhaite afficher la valeur.

Ainsi pour tracer 30 lignes de niveau de la fonction z = (x -1)2 + 10 (x2 -y)2 sur le domaine [-1 , 1] x [-1 , 1] et pour choisir à l'aide de la souris les lignes de niveau pour lesquelles l'isovaleur doit être affichée, on exécute:

>> [X,Y] = meshgrid(-2:.2:2, -2:.2:2);
>>  Z = (X-1).^2 + 10*(X.^2-Y).^2;
>> [C,h] = contour(X,Y,Z,30);
>> clabel(C,h,'manual') 
>>
Le résultat est présenté à la figure 13.
 
 

Figure 13: Exemple de visualisation des lignes de niveau par la commande contour.


 

Il est possible de modifier la palette des couleurs en utilisant la commande colormap. En tapant help graph3d dans la fenêtre de contrôle MATLAB, vous obtiendrez toutes les palettes de couleurs disponibles. A vous de les tester pour obtenir le meilleur effet (-:. La commande colormap(gray) permet d'utiliser une palette en dégradé de gris, ce qui est très utile si l'on souhaite une impression de la figure sur une imprimante noir et blanc.

La commande contourf s'utilise de la même manière que la commande contour. Elle permet d'afficher, en plus des lignes de niveau, un dégradé continu de couleurs qui varie en fonction des valeurs prises par la fonction. La figure 14 présente un exemple d'utilisation de la commande contourf obtenu de la manière suivante:

>> [X,Y] = meshgrid(-2:.2:2, -2:.2:2);
>> Z = (X-1).^2 + 10*(X.^2-Y).^2;
>> contourf(X,Y,Z,30);
>> colormap(cool);
>>


Figure 14: Exemple de visualisation des lignes de niveau par la commande contourf.

Représenter une surface d'équation z=g(x,y)

La commande mesh permet de tracer une surface d'équation z=g(x,y). La fonction g peut être définie directement par une expression MATLAB ou être définie comme une fonction utilisateur. Pour tracer la surface d'équation z=g(x,y) pour xmin< x < xmax et ymin< y < ymax on procède de la manière suivante: Ainsi pour tracer la surface d'équation z = x e-(x2+y2) sur le domaine [-2 , 2] x [-2 , 2] avec un maillage de maillage de longueur h=0.2, on exécute:
>> [X,Y] = meshgrid(-2:.2:2, -2:.2:2);
>> Z = X.*exp(-X.^2-Y.^2);
>> mesh(X,Y,Z)
>>
Si la fonction est définie comme une fonction utilisateur dans le fichier g.m,
function x3 = g(x1,x2)

x3 =  x1.*exp(-x1.^2-x2.^2);
on exécute:
>> [X,Y] = meshgrid(-2:.2:2, -2:.2:2);
>> Z = g(X,Y);
>> contour(X,Y,Z)
>>
Dans les 2 cas on obtient le résultat présenté figure 15.
 

Figure 15: Exemple de visualisation d'une surface d'équation z=g(x,y) grâce à la commande mesh.


 

Par défaut les valeurs extrêmes en z sont déterminées automatiquement à partir des extremums de la fonction sur le domaine spécifié. Il est possible de modifier ces valeurs (et également les valeurs extrèmes en abscisses et ordonnées) par la commande axisdont la syntaxe est axis(xmin xmax ymin ymax z_min z_max). Si vous n'êtes pas satisfait du résultat, l'instruction axis auto restaure la figure originale. La figure 16 montre par exemple le résultat de l'instruction axis([ -2 2 -2 2 -2 2]).

 

Figure 16: Exemple d'utilisation de la commande axis

I

l est également possible de modifier le point de vision grâce à la commande view. La commande view a deux arguments qui sont l'angle de vision horizontal et l'angle de vision vertical en degré. Par défaut ces angles ont repectivement les valeurs -37.5o et 30o. La figure 17 montre par exemple le résultat de l'instruction view(37.5,30).

 

Figure 17: Exemple de modification de l'angle de vision par la commande view.


 

Les commandes meshc et meshz s'utilisent de la même manière que la commande mesh. La commande meshc permet d'afficher des lignes de niveau sous la surface dans le plan z=zmin. La commande meshz permet de tracer une boite sous la surface. Un exemple d'utilisation de ces commandes est présenté à la figure 18.

 

Figure 18: Exemple de visualisation d'une surface d'équation z=g(x,y) grâce au commandes meshc et meshz.

Représenter une surface paramétrée

La commande surf permet de tracer une surface paramétrée d'équations,

La fonction  G = (g1, g2, g3) peut être définie directement par une expression MATLAB ou être définie comme une fonction utilisateur. Pour tracer la surface paramétrée d'équation (E) pour umin< u < umax et vmin< v < vmax on procède de la manière suivante:
 

Ainsi pour tracer la surface paramétrée d'équations

sur le domaine  avec un maillage de maillage de longueur h=0.2, on exécute:

>> [U,V] = meshgrid(0:.2:2*pi, 0:.2:2);
>> X = V.*cos(U);
>> Y = V.*sin(U);
>> Z = 2*U;
>> surf(X,Y,Z)
Si la fonction est définie comme une fonction utilisateur dans le fichier G.m,
function [x1, x2, x3] = G(u,v)

x1 = v.*cos(u);
x2 = v.*sin(u);
x3 = 2*u;
on exécute:
>> [U,V] = meshgrid(0:.2:2*pi, 0:.2:2);
>> [X,Y,Z] = G(U,V);
>> surf(X,Y,Z)
Dans les 2 cas on obtient le résultat présenté figure 19.

 
 
Figure 19: Exemple de visualisation d'une surface paramétrée grâce à la commande surf.



nextpreviouscontents
Suivant: il n'y en a pas  Précédent:Programmer sous Matlab
Voir:  Table des matièreIndex - Accueil

(c) Stéphane Balac - Centre de Mathématiques - INSA de Lyon