Les Graphiques

Tracer une courbe:

Sous MATLAB, rien de plus facile que de tracer une courbe correspondant à une suite de points :

y=[ 1 3 2 5 4 7 5 8 7 10 7 8 5 6 3 4 1];
plot(y);
 

Si aucune fenêtre graphique n'est déjà ouverte, la commande plot en ouvre une nouvelle et trace la courbe demandée. Si des fenêtres graphiques sont déjà ouvertes, la courbe est tracée dans la fenêtre courante.


La commande grid

Pour tracer le quadrillage du graphique :

grid on;

La commande grid toute seule (sans le on) fonctionne comme un swich, si on l'exécute une deuxième fois, les grids disparaissent.



Couleur du trait

Pour tracer la courbe en rouge :
plot(y,'r')

On peut utiliser les couleurs prédéfinies, ou un triplet [rouge  vert   bleu]

Pour voir toutes les possibilités, tapez : 
help plot

Type de trait

essayer les commandes :
plot(y,'o');
plot(y,'*');
plot(y,'--');
plot(y,':');

Tapez help plot pour voir tous les types de trait possibles.
on peut combiner couleur et type de trait :
plot(y,'g:')

Épaisseur de trait

Quand on trace une courbe, en plus de la couleur et du type de trait, on peut agir aussi sur son épaisseur. Pour cela, on dispose de deux façons :

plot(x,y,'Linewidth',k);
k peut prendre des valeurs entières ou décimales pour indiquer l'épaisseur du trait. La valeur par défaut est 1. exemple :

plot(y,'Linewidth',2.5);
Une deuxième méthode consiste à attribuer un pointeur à une courbe au moment de son tracé. On peut par la suite modifier les propriétés de cette courbe à l'aide de la fonction set().

close all;
h1=plot(y,'r');
hold on;
z = 10-y;
h2=plot(z,'b');
set(h1,'LineWidth',2);
set(h2,'LineWidth',4);
set(h1,'linestyle','--','marker','diamond','MarkerSize',10);

Pour voir toutes les propriétés qu'on peut modifier:
set(h1)

Pour voir toutes les valeurs que peut prendre une propriété (marker par exemple):
set(h1,'marker')

On peut aussi utiliser la fonction get() pour voir quel est la valeur actuelle d'une propriété:
get(h2,'LineWidth')

L'axe des x

Pour qu'un graphique soit significatif, il faut que l'axe des x corresponde à quelque chose. Supposons que les valeurs de la suite y sont des mesures qui ont été relevées toutes les 5 secondes, la suite correspondant à l'axe des x sera :

x = [0 5 10  15  20 25  30  35  40  45 50  55 60 65 70 75  80];


Maintenant on peut tracer la courbe y en fonction de x, ce qui provoque une graduation correcte de l'axe des x
plot(x,y,'m','linew',2);grid;

Vous avez remarqué qu'on peut abréger le nom des propriétés en utilisant linew à la place de linewidth

Il est évident que si la suite y était constituée d'un nombre de points plus important, on ne pourrait pas définir le vecteur x comme on l'a fait ci-dessus. La méthode la plus appropriée est l'utilisation de l'opérateur :

n = length(y);
x = 0 : 5 : (n-1)*5;


Modification des limites des axes


Ceci peut être réalisé à l'aide de la fonction axis()

close all;
plot(x,y,'m','linew',2);
axis([-10 100 -5 15]);
grid;





Contrôle de la graduation des axes


Quand on trace une courbe, le pas de graduation est défini automatiquement. On peut le modifier à l'aide de la fonction set() et des propriété xtick et ytick de l'axe courant. Pour déterminer quel est le pointeur de l'axe courant, on utilise la commande gca

close all
plot(x,y);
grid;
h = gca;
set(h,'xtick',0:5:100,'ytick',[1 2 3 8 9 10]);

La commande close

La commande close ferme la fenêtre graphique courante.
La commande close(id) ferme la fenêtre graphique dont l'identificateur est id
La commande close all ferme toutes les fenêtres

La commande figure

Nous avons remarqué dans ce qui précède que, si une figure est présente à l'écran, le fait de tracer une nouvelle figure utilise la même fenêtre graphique, le nouveau tracé remplace l'ancien. Pour que le nouveau tracé soit réalisé à part, il faut ouvrir une nouvelle fenêtre à l'aide de la commande figure

z = y/3;
close all;
plot(x,y);grid;
figure;
plot(x,z);grid;

La commande hold on

Si on désire tracer les deux courbes sur un  même graphique :

close all;
plot(x,y,'r');
hold on;
plot(x,z,'b');
grid;

Remarquons que dans ce cas simple, ce résultat peut être obtenu en utilisant la commande plot dans sa forme la plus générale;

plot(x,y,x,z); grid;

ou encore

plot(x,y,'r',x,z,'b'); grid;

ou encore

plot(x,y,'r',x+100,z,'b'); grid;


Annotation d'un graphique

Les foncions xlabel, ylabel et title  permettent d'annoter respectivement l'axe horizontal, l'axe vertical et la figure elle-même. La commande text(x,y,'texte')  permet placer un texte à la position x,y. La commande gtext('texte') permet de placer un texte à l'aide de la souris

plot(x,y); grid;
xlabel('Temps en seconde');
ylabel('grandeur mesurée');
title('TITRE DU GRAPHIQUE');
text(55,8.5,'texte libre');
text(10,7,'texte incliné','rotation',45);
gtext('texte placé par la souris');



Lire la position de la souris

La fonction ginput permet de digitaliser la figure courante, c'est à dire de mémoriser les positions cliquées par la souris.

plot(x,y);grid;
[X,Y]=ginput(1) 

cliquez quelque par sur la figure pour obtenir les coordonnés du point pointé

X =    40
Y =    4

B=ginput(4)

Cliquer sur 4 points quelconques pour obtenir leurs coordonnés, exemple :

B =
   20.0000    1.9849
   30.0000    2.9698
   40.2326    2.9698
   50.0000    3.9547

[U,V]=ginput(4)

Cliquer 4 fois

U =
   34.1860
   46.0465
   57.6744
   27.6744
V =
    4.6340
    5.8906
    7.4189
    8.7094

Si on ne précise pas de paramètre pour la fonction ginput, il faut arrêter la saisie par la touche ENTER ↵

>> B=ginput
Cliquez le nombre de fois que vous voulez puis taper ↵


LA HIERARCHIE DES OBJETS GRAPHIQUES


Les objets graphiques sous MATLAB  sont organisés selon la hiérarchie suivante :


   Chaque objet crée a un identificateur appelé pointeur ou handle qui lui est affecté au moment de sa création, ainsi qu'un certain nombre de propriétés qu'on peut définir lors de la création de l'objet ou plus tard à l'aide de la fonction set().

L'objet root

L'objet root ne peut être ni crée ni supprimé par l'utilisateur. Il est crée automatiquement lors du lancement de MATLAB . Son pointeur est toujours 0.En général il correspond à l'écran.

get(0,'ScreenSize')    --> dimensions de l'écran
get(0)    --> toutes les propriétés actuelles de l'écran
set(0)    --> toutes les propriétés que l'on peut modifier à l'aide de la fonction set()
  

L'objet figure

l'objet figure est créé à l'aide de la commande figure

figure
fig1 = figure
fig2 = figure('position',[1 1 400 300]);
set(fig1,'color','m','menubar','none');
figure(fig2)
--> la figure dont le pointeur est fig2 devient la figure courante
  
Le tableau ci-dessous illustres quelques propriétés de l'objet figure. Pour voir toutes les propriétés possibles d'une figure, utiliser la commande set :
>> set(fig1)
>> set(gcf)  
      gcf correspond au pointeur de la figure courante

Propriété Description
Position Position et taille de la figure :[Xmin  Ymin  Largeur   Hauteur]
Units Unités utilisées pour interpréter le paramètre position : inches, centimetres, normalized, points, {pixels}, characters
Color Couleur de l'arrière plan, peut être soit une couleur prédéfinie 'r', 'yellow' ? ou un triplet [R G B]
MenuBar Pour afficher ou non la barre des menus : none, {figure}
Name Titre de la fenêtre  graphique
NumberTitle Affiche ou non le numéro de la figure : {on}, off
Resize Pour préciser si la fenêtre peut être redimensionnée à l'aide de la souris : off, {on}
Visible Fenêtre Visible ou non :  {on}, off
CurrentAxes Pour définir un axe comme l'axe  courant
CurrentObject Pour définir un objet comme l'objet courant




L'objet axe

Un objet axe est crée à l'aide la fonction axes(). Si on trace un objet graphique  (une ligne par exemple) avant de créer un axe, alors celui ci est crée automatiquement vu qu'une ligne ne peut exister sans l'objet père qui est l'axe.

ax1 = axes('position',[0.1 0.1 0.4 0.4])
la lige ci-dessus crée un axe dans la fenêtre courante avec la position et la taille spécifiée par la propriété position  et lui affecte l'identificateur ax1. S'il n'y a pas de fenêtre ouverte, une nouvelle fenêtre est crée car un axe ne peut pas exister tout seul.

ax2=axes('parent',fig2,'position',[0.5  0.5  0.4  0.4])
crée un axe dans la fenêtre fig2 avec la position et la taille spécifiée par la propriété position  et lui affecte l'identificateur ax2

Les fonctions comme plot(), grid(), semilogx() ... tracent toujours dans l'axe courant désigné par gca.
Pour tracer dans un axe donné, on dispose de deux façons:
Le tableau ci-dessous illustres quelques propriétés de l'objet axes. Pour voir toutes les propriétés possibles d'un système d'axes, utiliser la commande set(identificateur_axe) ou set(gca)  (gca  --> axe courant )

Propriété Description
Box trace ou non un carré autour des axes : on ,{off}
Color couleur de l'arrière plan
Children Liste des pointeur des objet appartenant à cet axe
FontAngle Inclinaison des caractères : {normal}, italic, oblique
FontName Fonte des graduations et du titre des axes : arial ?
FontSize Taille du texte des graduations et des titres des axes :{10}
FontUnits Unité de FontSize : {points}, normalized, centimeters, pixels
FontWeight Normal ou gras : {normal}, bold, light, demi
GridLineStyle style de trait des graduation : -, --, {:}, -., none
LineWidth épaisseur de trait pour les axes en point {0.5}
NextPlot Tracé suivant : {replace}, add, replacechildren
on peut aussi utiliser les fonctions hold on, hold off
Parent pour préciser dans quel fenêtre l'axe doit être crée
Position Position des axes : [Xmin   Ymin   Largeur  Hauteur]
Title Définit le titre à l'aide d'un pointeur pointant sur un texte. On peut aussi utiliser la fonction title
Units Les unités de la propriété position
Visible axex visibles ou non : {on}, off
XGrid, YGrid, ZGrid Affiche ou non les graduations pour chaque axe : on, {off}
XLabel, YLabel, ZLabel Définit les titres des axes. Leurs valeurs doivent être des identificateurs de texte. On peut aussi utiliser les fonctions xlabel, ylabel et zlabel
XTickLabel, YTickLabel,  ZTickLabel définit les textes des graduations des axes
XAxisLocation Position de l'axe des x : {botom}, top
YAxisLocation Position de l'axe des y : {left}, right
XLim, YLim, ZLim Limites des axes : [min  max]
On peut aussi utiliser la fonction axis()
XTick, YTick, ZTick Position des graduations
XColor, YColor, ZColor couleur des axes et des graduations

Remarque:
Quand un axe est en mode hold off, ('NextPlot'=replace), un nouveau tracé avec une fonction de haut niveau comme la fonction plot supprime tous les objets appartenant à l'axe  (lignes, textes, titre)

La fonction subplot()

La fonction subplot() permet de créer et de contrôler des graphiques à axes multiples.
    
subplot(n,m,k)  : Partage la figure courante en n x m rectangle ( n lignes et m colonnes) et crée un (sous)axe à la position k, cet axe devient l'axe courant.

Id = subplot(n,m,k) : Crée un sous axe et affecte son identificateur à la variable id.
    
subplot(id)  : L'axe d'identificateur id devient l'axe courant
  
Exemple :

t=0:0.1:8;
x=sin(t);
y=sin(2*t);
close all;
f1=figure('NumberTitle','off','name','Illustration de la commande SUBPLOT');
a1=subplot(2,2,1);
plot(t,x);grid;
text(3,0.2,'\leftarrow sin(x)');
title('subplot(2,2,1)');
a2=subplot(2,2,2);
plot(t,y);grid;
title('subplot(2,2,2)');
a3=subplot(2,2,3);
plot(x,y);
title('subplot(2,2,3)');
a4=subplot(2,2,4);
plot(y,x);
title('subplot(2,2,4)');
set(a1,'color','c');
set(a3,'xgrid','on');
set(a4,'ygrid','on');




L'objet Ligne

Les lignes sont les objets graphiques de base. Elles appartiennent à un système d'axe et peuvent être crées par les fonctions plot(), line(), plot3() et d'autres fonctions.
x = 0:0.1:6;
y = sin(x);
l1 = plot(x,y,'linewidth',2);
set(l1,'marker','d');


Pour déterminer tous les attributs possibles de la ligne l1:
set(l1)

Pour consulter les valeurs possibles d'un attribut (LineStyle par exemple):
set(l1,'LineStyle')

Voici quelques attributs courants:

Propriété Description
Color Couleur de la ligne
EraseMode Permet de contrôler la façon dont Matlab trace ou efface les objets.
Peut prendre les valeurs {normal} | background | xor | none.
Avec xor, si on trace un objet sur lui, même, il est efacé
LineStyle
Type de trait:     {-} | -- | : | -. | none
LineWidth
Epaisseur de trait. {0.5 points}
Marker marqueurs des points constituant une ligne
les valeurs possibles sont: + | o | * | . | x | square | diamond | v | ^ | > | < | pentagram | hexagram | {none}
MarkerEdgeColor Couleur du bord du marqueur
MarkerFaceColor Couleur de fond du marquer
MarkerSize Taille du marquer {6 points}
Parent identificateur de l'objet axe qui va recevoir la ligne. Par défaut, c'est l'axe courant
Visible visible ou non {on}, off


L'objet Text

Les objets text sont des chaînes de caractère. Ils appartiennent à un système d'axes et sont positionnés selon son système de coordonnées. Les fonctions text(), title(), xlabel(), ylabel(), zlabel() et gtext() permettent de créer des objets text.

id = text(x,y,'chaine de caractère', 'propriété',valeur_propriété ... );




Propriété Description
Color Couleur du texte
FontAngle Inclinaison des caractères : {normal}, italic
Fontname Nom de la fonte à utiliser
FontSize taille des caractères en fontUnits
FontUnits Unité de fontsize : {points}, normalized, inches, centimetres, pixels
FontWeight Normal ou gras : light, {normal}, demi, bold
HorizontalAlignment Justification horizontale : {left}, center,right
Parent Identificateur de l'axe père
Rotation Orientation du texte en degré
Units Unités de position : pixels, normalized, inches, centimeters, points, {data}
VerticalAlignment Justification verticale : top, cap, {middle}, baseline, botom
Visible Visible ou non : {on}, off


Quelques Exemples:


Exemple 1:
sz=get(0,'screensize');
L=sz(3);
H=sz(4);
close all;
fig1=figure('position',[10 H/2  0.45*L  0.4*H],'color',[0.5 0.5 0]);
ax1 = axes('parent',fig1,'position',[0.5 0.55 0.45 0.35],...
    'color','y','xcolor','w','ycolor','m','nextplot','add');
title('tracé 1','color','w');
fig2=figure('position',[L/2   H/2   0.45*L   0.45*H],'color','m');
set(fig2,'numbertitle','off','menubar','none','name','GRAPHIQUE  2');
ax2=axes('parent',fig2,'position',[0.1 0.57 0.45 0.3],'color','c','nextplot','add');
title('tracé 2');
ax3 = axes('parent',fig2,'position',[0.1   0.1   0.8   0.3],'nextplot','add');
title('tracé 3');

x=0:0.1:6;
y1=sin(x);
y2=1.5*sin(2*x);
l1=plot(x,y1);  % sera ajouté à l'axe courant  ( = ax3)
l2=plot(x,y2,'r'); % sera ajouté à l'axe courant  ( = ax3)
l3 = plot(x,y2,'Parent',ax1,'LineWidth',2); %sera ajouté à l'axe ax1
l4 = plot(x,y2,'r','Parent',ax2);   %sera ajouté à l'axe ax2





Exemple 2:
x = -pi:pi/100:pi;
y1 = sin(1.5*x);
y2 = 0.4*cos(10*x);
y3 = y1 + y2;
close all;
plot(x,y1,':r',x,y2,'--m');
hold on;
plot(x,y3,'b','linewidth',2);
axis([-pi pi -1.5 1.5]);
grid;

t = -pi:pi/50:pi;
s1 = sin(5*t);
s2 = 1 + 0.8*sin(t);
s3 = s1 .* s2;
pf1 = get(gcf,'position');
figure('position',[pf1(1)+100 pf1(2)-100 pf1(3) pf1(4)]);
plot(t,s3,':ro','linewidth',2,'MarkerEdgeColor','b',...
        'MarkerFaceColor','y','MarkerSize',10);
hold on;
plot(t,s2,'--k',t,-s2,'--k');
axis([-pi pi -2 2]);
set(gca,'xtick',-pi:pi/4:pi);
set(gca,'xticklabels',...
    ['  -p ';'-3p/4';' p/2 ';'-p/4 ';'  0  ';' p/4 ';' p/2 ';' 3p/4';'  p  ']);
set(gca,'fontname','symbol');
grid;

Ce scripte permet d'illustrer les points suivants :




Les valeurs par défaut des propriétés graphiques

A la création d'un objet graphique, MATLAB  affecte des valeurs par défaut pour toutes les propriétés non précisées.

get(0,'Factory')

get(0,'FactoryText') 
  
get(0,'FactoryTextFontName') 

Pour modifier la position et les dimensions par défaut des figures :
set(0,'DefaultFigurePosition',[330 200 465 325]);

Pour faire de sortes que les grids soient tracés automatiquement :
set(0,'DefaultaxesYGrid','on','DefaultaxesXGrid','on');

Pour spécifier une épaisseur de trait de 1.5 point
set(0,'DefaultLineLineWidth',1.5)

On peut spécifier les propriétés par défaut à partir d'un niveau hiérarchique donné. Si on spécifie des propriétés par défaut au niveau d'une figure existante, tous les objets affiliés à cette figure hériteront de ces propriétés. Par contre, si une autre figure est créée, elle ne sera pas concernée par ces définitions et ira chercher ses valeurs par défaut au niveau root = 0.
  

Recopier un objet d'un parent à l'autre


On peur recopier un objet d'un parent vers un autre en utilisant la commande copyobj. Le nouvel objet  diffère du premier seulement par son pointeur et sa propriété parent. Quand on copie un objet qui a des descendants, ceux-ci sont copiés avec lui.
  
Copier/Coller ce scripte dans la fenêtre de commande Matlab:
  
x=0:0.01:13;
y1=sin(x);
y2=0.5*cos(2*x);
close all;
f1=figure;
a1=subplot(2,2,1);
l1=plot(x,y1);
a2=subplot(2,2,2);
l2=plot(x,y2);
f2=figure;
a3=axes('position',[0.06 0.1 0.9 0.6]);
l3=plot(x,y1,x,y2);
  

Tapez les commandes suivantes tout en observant la figure f2
  
a4 = copyobj(a1,f2);
a5 = copyobj(a2,f2);

Pour accéder à un axes pour tracer de nouvelle ligne par exemple, il suffit d'utiliser la commande axes. Essayer les commandes suivantes en observant la figure.
  
axes(a3);
axes(a4);
axes(a5);

garder la figure f2 à l'écran pour illustrer le paragraphe suivant


Comment détruire un objet


Pour détruire un objet, on utilise la fonction delete(identificateur)
  
Tout en observant la figure f2 du paragraphe précédent, taper les commandes suivantes :
delete(a5);
delete(l3(2));

Remarquez que l'identificateur l3 est en réalité un vecteur de deux éléments, l3(1) et l3(2) car la commande  l3=plot(x,y1,x,y2); trace deux courbes