FAQ MATLAB
FAQ MATLABConsultez toutes les FAQ
Nombre d'auteurs : 11, nombre de questions : 172, dernière mise à jour : 29 septembre 2022
- Comment mettre une étiquette à mes points ?
- Comment récupérer les valeurs de données tracées ?
- Comment tracer une ligne dont la couleur varie ?
- Comment animer le tracé d'une courbe ?
- Pourquoi la fenêtre clignote-t-elle lors de l'animation de tracé ?
- Comment associer une couleur unique à chaque courbe tracée ?
- Comment incliner les labels des repères des axes abscisses d'un graphique ?
- Comment ajouter un titre général à plusieurs graphiques (subplot) ?
- Comment insérer des dates comme marqueurs des axes d'un graphique ?
- Comment capturer une image à partir d'un graphique ?
- Pourquoi l'identifiant ('Tag') de mon objet Axes a-t-il disparu après un tracé ?
- Comment relier des points dans une boucle ?
- Pourquoi l'affichage en boucle d'un graphe n'affiche que la dernière itération ?
- Comment effectuer l'ajout d'une légende dans une boucle ?
- Comment utiliser plusieurs palettes de couleurs (colormap) dans une figure ?
- Comment effectuer un tracé dans un objet Axes en particulier ?
- Comment ajouter titre, légende, texte, annotations… ?
Pour mettre une étiquette sous forme de numéro à des points tracés avec, par exemple, la fonction plotDocumentation de la fonction plot, il faut utiliser holdDocumentation de la fonction hold et textDocumentation de la fonction text comme ceci :
x = rand(3,1);
y = rand(3,1);
figure
plot(x,y,'r+'
);
hold on
str = num2str((1:numel(x)).', '%1d'
); % ATTENTION le premier argument de NUM2STR doit être un vecteur colonne
text(x+0.01, y+0.01, str) % Le décalage de 0.01 est arbitraire ici.
Si les coordonnées x et y forme une grille et sont générées par la fonction meshgridDocumentation de la fonction meshgrid, il faut employer l'opérateur colon (:) dans la fonction text comme ceci :
[x,y] = meshgrid(1:3,1:4);
figure
plot(x,y,'r+'
);
hold on
str = num2str((1:numel(x)).', '%1d'
); % ATTENTION le premier argument de NUM2STR doit être un vecteur colonne
text(x(:)+0.01, y(:)+0.01, str) % Le décalage de 0.01 est arbitraire ici
Si on n'utilise pas l'opérateur colon (:), MATLAB renverra ce message d'erreur :
??? Error using ==> text
Value must be a column or row vector
Si on souhaite utiliser des étiquettes contenant des chaînes de caractères de longueurs différentes, il faut alors utiliser un tableau de cellules comme ceci :
[x,y] = meshgrid(1:2);
nom = {'zeDFQ'
'DSYTJqt'
'qre'
'ytreERF'
};
figure
plot(x,y,'r+'
);
text(x(:)+0.01, y(:)+0.01, nom)
Dans tous les cas, il faut utiliser la fonction findobjDocumentation de la fonction findobj pour récupérer l'identifiant de l'objet dont on veut récupérer les données.
Pour les objets de type LineDocumentation objet Line (nuage de points ou lignes), Surface ou MeshSurface and Mesh Plots, on récupère les propriétés 'XData'
, 'YData'
et 'ZData'
:
x = rand(3,1)
y = rand(3,1)
figure
plot(x,y,'r+'
);
h = findobj('type'
, 'line'
, 'marker'
, '+'
, 'color'
, [1 0 0]);
xx = get(h, 'XData'
)
yy = get(h, 'YData'
)
zz = get(h, 'ZData'
)
[X,Y,Z] = peaks(20)
surf(X,Y,Z);
h = findobj('type'
, 'surf'
);
xx = get(h, 'XData'
)
yy = get(h, 'YData'
)
zz = get(h, 'ZData'
)
Pour les objets de type ImageDocumentation objet Image, on récupère la propriété 'CData'
:
load clown
figure('colormap'
, map)
imagesc(X);
h = findobj('type'
,'image'
);
XX = get(h,'CData'
)
Pour les objets de type PatchDocumentation objet Patch, on récupère, soit les propriétés 'XData'
, 'YData'
et 'ZData'
, soit les propriétés 'Vertices'
et 'Faces'
:
t = (1/16:1/8:1).'*2*pi;
x = sin(t);
y = cos(t);
figure
patch(x,y,'r'
);
axis equal
h = findobj('type'
, 'patch'
);
xx = get(h, 'XData'
);
yy = get(h, 'YData'
);
% ou
V = get(h, 'Vertices'
);
F = get(h, 'Faces'
);
Les fonctions plotDocumentation de la fonction plot ou lineDocumentation de la fonction line ne permettent pas de faire varier la couleur d'un objet LineDocumentation objet Line entre deux points.
L'astuce consiste à utiliser un objet patchDocumentation de la fonction patch d'épaisseur nulle en faisant varier la couleur à ces sommets.
Supposons que les coordonnées des points définissant la ligne soit stockées dans trois variables X,Y et Z sous forme de vecteurs et qu'un quatrième vecteur C de même dimension donne les valeurs des couleurs à chaque sommet, le code devra être exactement comme ceci :
patch('XData'
, [nan;X(:);nan],...
'YData'
, [nan;Y(:);nan],...
'ZData'
, [nan;Z(:);nan],...
'CData'
, [nan;C(:);nan],...
'FaceColor'
, 'interp'
, ...
'EdgeColor'
, 'interp'
)
Dans le cas d'un tracé en 2D, il suffit de supprimer la ligne avec la propriété 'ZData'
.
Par exemple, pour faire varier la couleur d'une spirale 3D en fonction de sa hauteur Z :
th = linspace(0,20*pi,400);
X = 100*cos(th);
Y = 100*sin(th);
Z = 1:numel(X);
C = Z;
figure
patch('XData'
, [nan;X(:);nan],...
'YData'
, [nan;Y(:);nan],...
'ZData'
, [nan;Z(:);nan],...
'CData'
, [nan;C(:);nan],...
'FaceColor'
, 'interp'
, ...
'EdgeColor'
, 'interp'
)
axis equal
view(3)
Rappel : les quatre variables X, Y, Z et C doivent avoir le même nombre d'éléments.
% Génération des données
th = 0:0.02:10*pi;
y = sin(th);
% Création de l'objet Figure contenant les tracés
fig = figure;
% Premier objet Axes où est tracée la courbe directe
subplot(2,1,1)
% Tracé de la courbe
plot(th,y,'r-'
)
% Ajustement des limites de l'objet Axes
xlim([min(th) max(th)])
ylim([min(y) max(y)])
% Second objet Axes où est tracée la courbe animée
subplot(2,1,2)
% Modification de la propriété DoubleBuffer de l'objet Figure pour
% éviter le clignotement de la fenêtre
% Décommenter la ligne suivante seulement pour les anciennes versions de MATLAB
% set(fig, 'doublebuffer', 'on')
% Tracé du premier point de la courbe
% et récupération de l'identifiant (handle) p de l'objet Line créé.
p = plot(th(1),y(1),'r-'
);
% Ajustement des limites de l'objet Axes
xlim([min(th) max(th)])
ylim([min(y) max(y)])
% On boucle sur le nombre de points à tracer.
% On démarre à 2 puisque le premier est déjà tracé
for
n = 2:numel(th)
% Ajout des points de la courbe au fur et à mesure
% en utilisant la combinaison SET + identifiant (handle)
set(p, 'XData'
, th(1:n), 'YData'
, y(1:n));
% Forçage de l'affichage du tracé
drawnow
end
On pourra aussi utiliser le couple '(X/Y/Z)DataSource'
- refreshdataDocumentation de la fonction refreshdata :
t = 0:pi/100:2*pi;
y = exp(sin(t));
h = plot(t,y, 'YDataSource'
, 'y'
);
for
k = 1:0.01:10
y = exp(sin(t.*k));
refreshdata(h, 'caller'
)
drawnow
end
Ou les fonctions cometDocumentation de la fonction comet et comet3Documentation de la fonction comet3 qui se chargeront de tracer au fur et à mesure une courbe à partir de ses points prédéterminés.
Lien : Pourquoi la fenêtre clignote-t-elle lors de l'animation de tracé ?
Cette solution ne concerne que les versions de MATLAB fonctionnant sur d'anciennes machines. La propriété DoubleBuffer n'a plus aucun effet sur les versions récentes de MATLAB (voir la release notes de la version R2013a, section « Graphics > Functionality being removed or changed »).
Le code suivant trace une sinusoïde au fur et à mesure mais la fenêtre clignote.
th = 0:0.02:10*pi;
y = sin(th);
figure
p = plot(th(1),y(1),'r-'
);
xlim([min(th) max(th)])
ylim([min(y) max(y)])
for
n=2:numel(th)
set(p, 'XData'
, th(1:n), 'YData'
, y(1:n));
drawnow
end
Pour éviter le phénomène de clignotement, il faut mettre la propriété 'DoubleBuffer'
de l'objet FigureDocumentation objet Figure à 'On'
.
Le code précédent devient :
th = 0:0.02:10*pi;
y = sin(th);
figure('DoubleBuffer'
, 'on'
)
<etc.>
Une solution efficace pour être sûr d'obtenir une couleur différente pour chaque courbe tracée et ce, quel que soit le nombre de courbes, consiste à générer une plage de couleurs à l'aide de la fonction hsv.
Par exemple :
figure
nCourbes = 10;
couleurs = hsv(nCourbes);
for
n=1:nCourbes
h(n) = line(rand(3,1), rand(3,1), 'color'
, couleurs(n,:));
end
legend(h, num2str((1:nCourbes).'));
Une autre solution consiste à utiliser la commande
hold all
avant d'utiliser la fonction plotDocumentation de la fonction plot. Dans ce cas, MATLAB applique par défaut successivement 7 couleurs différentes dans l'ordre suivant :
- bleu
- vert
- rouge
- turquoise
- violet
- kaki
- noir
Pour le 8e tracé, MATLAB recommence la boucle au bleu.
Par exemple :
figure
% Définition de la propriété HOLD à ALL
hold all
;
nCourbes = 10;
% Boucle pour tracer 10 courbes de couleurs différentes
for
n = 1:nCourbes
% Tracé d'une ligne simple avec PLOT
h(n) = plot([0,10], [n,n]); % Pas besoin de spécifier la couleur
end
legend(h,num2str((1:nCourbes).'));
Il est également possible de spécifier sa propre liste de couleurs en modifiant la propriété 'ColorOrder'
de l'objet AxesDocumentation objet Axes contenant le tracé.
Par exemple :
figure
% Définition de la propriété HOLD à ALL
hold all
;
nCourbes = 10;
couleurs = hsv(nCourbes);
set(gca,'ColorOrder'
,couleurs)
% Boucle pour tracer 10 courbes de couleurs différentes
for
n = 1:nCourbes
% Tracé d'une ligne simple avec PLOT
h(n) = plot([0,10], [n,n]); % Pas besoin de spécifier la couleur
end
legend(h,num2str((1:nCourbes).'));
Il est possible depuis la version MATLAB R2014b d'utiliser les propriétés '(X/Y/Z)TickLabelRotation'
de l'objet AxesDocumentation objet Axes :
set(gca, 'XTickLabelRotation'
, angle_en_degres)
Dans les versions précédentes, les objets de type AxesDocumentation objet Axes ne possèdent pas de propriété permettant d'incliner les labels des repères de l'axe des abscisses d'un graphique.
Il existe néanmoins plusieurs contributions disponibles sur le File Exchange qui répondent à ce besoin :
- XTICKLABEL_ROTATE, par Brian Katz ;
- XTICKLABEL_ROTATE90, par Denis Gilbert ;
- Rotate XTick Labels for multi-axes, par Peter Platzer ;
- Rotate Tick Label par Andrew Bliss ;
- tlabel.m v2.6.1 (Sep 2009), par Carlos Adrian Vargas Aguilera.
Il existe trois contributions sur le File Exchange :
La mise en forme des labels des axes sous la forme de dates et heures dans un tracé se fait à l'aide de la fonction datetickDocumentation de la fonction datetick. Pour cela, les entrées de l'axe concerné doivent être mises sous forme numérique (comme celle retournée par datenumDocumentation de la fonction datenum).
Dates = cellstr( num2str((1:31).', '%02d/05/2011'
) ); % Génération des 31 jours de mai 2011
Dates_num = datenum(Dates, 'dd/mm/yyyy'
); % Conversion avec datenum
Values = rand(1,31); % Génération de données à mettre en ordonnées
plot(Dates_num, Values) % Affichage
datetick('x'
, 'dd/mm'
) % Mise de l'axe des x sous la forme jours/mois
Les différents formats de date disponibles sont détaillés dans la documentation de la fonction datetick.
Afin de sélectionner les marques de repérage des valeurs sur l'axe, on pourra utiliser la propriété 'xtick'
, 'ytick'
ou 'ztick'
de l'axe, on ajoutera alors 'keepticks'
comme entrée à la fonction datetick :
plot(Dates_num,Values)
set(gca, 'xtick'
, Dates_num(1):3:Dates_num(end)) % Ici un repère tous les 3 jours
datetick('x'
, 'dd/mm'
, 'keepticks'
) % format jour/mois appliqué à l'axe des abscisses x
La contribution ci-dessous permet l'évolution des labels avec le zoom/pan :
Lien : tlabel de Carlos Adrian Vargas AguileraContribution sur le File Exchange
Pour enregistrer le contenu d'un graphique sous forme d'image, il existe principalement trois fonctions :
-
printDocumentation de la fonction print et saveasDocumentation de la fonction saveas : permettent de sauvegarder une figure sous forme de fichier dans un format spécifique :
Sélectionnezsaveas(gcf,
'fichier'
,'jpg'
)% ou
print('-djpeg'
,'-r200'
,'fichier'
) -
getframeDocumentation de la fonction getframe : plus tournée pour faire la capture de trames vidéo, cette fonction permet d'obtenir l'image d'un objet AxesDocumentation objet Axes ou d'un objet FigureDocumentation objet Figure sous forme de structure :
SélectionnezF = getframe(…) F = cdata: [hauteur x largeur x 3 uint8] colormap: [N x 3]
On pourra par la suite :
-
sauvegarder ces images avec la fonction imwriteDocumentation de la fonction imwrite :
Sélectionnezimwrite(F.cdata, F.colormap,
'nomFichier.jpg'
)Remarque : la palette de couleurs (colormap) sera le plus souvent vide (=[]) sur les systèmes travaillant en couleurs vraies. On pourra alors faire cette vérification avec la fonction isemptyDocumentation de la fonction isempty.
Le code précédant deviendra alors :Sélectionnezimwrite(F.cdata,
'nomFichier.jpg'
) -
créer une vidéo avec les fonctions addframeDocumentation de la fonction addframe et aviobjDocumentation de la fonction aviobj, ou sur les versions MATLAB 2010b et + avec la classe VideoWriterDocumentation classe VideoWriter .
-
Ce comportement est lié à la propriété 'NextPlot'
de l'objet AxesDocumentation objet Axes dans lequel s'effectuent les tracés.
- Si celle-ci est mise à
'replace'
, les fonctions plotDocumentation de la fonction plot, imageDocumentation de la fonction image, surfDocumentation de la fonction surf… vont réinitialiser toutes les propriétés de l'objet AxesDocumentation objet Axes (sauf'Position'
) remettant ainsi'Tag'
à la chaîne vide''
. - Si celle-ci est mise à
'add'
ou'replacechildren'
, l'objet Axes conserve ses propriétés.
Pour éviter cela, on ajoutera l'une des lignes suivantes avant d'utiliser les fonctions de traçage :
set(handleAxes, 'NextPlot'
, 'replacechildren'
)
% ou
hold(handleAxes, 'on'
)
% ou
set(handleAxes, 'Nextplot'
, 'add'
)
Afin de pouvoir relier les points générés à chaque itération d'une boucle, il faut que ceux-ci soient tracés au sein d'un même objet LineDocumentation objet Line. Or, à chaque appel de la fonction plotDocumentation de la fonction plot, un nouvel objet LineDocumentation objet Line est généré, ce qui empêche de les relier. La multiplication des appels à plot peut engendrer un ralentissement du code si le nombre d'objets devient élevé.
La solution est donc d'utiliser un seul objet Line que l'on mettra à jour à chaque itération à l'aide de la fonction setDocumentation de la fonction set.
Dans l'exemple qui suit, les données à tracer sont contenues dans les tableaux x et y.
figure('doublebuffer'
, 'on'
); % On évite le clignotement de la fenêtre
handleLine = plot(NaN,NaN); % Tracé "invisible" permettant de générer notre objet Line
N = 100;
% Ajustement des limites des axes pour ne pas obtenir de redimensionnement à chaque itération
xlim([1 N])
ylim([0 1])
x = zeros(1,N);
y = zeros(1,N);
for
k = 1:N
x(k) = k;
y(k) = rand;
set(handleLine,... % mise à jour :
'XData'
, x(1:k),... % des données en abscisses
'YData'
, y(1:k)) % des données en ordonnées
drawnow % Rafraîchissement du graphique
end
Si l'on ne souhaite pas animer le tracé, il suffit de remplir des tableaux (x et y dans le code précédent) et d'appeler la fonction plot une seule fois après la boucle :
N = 100;
x = zeros(1,N);
y = zeros(1,N);
for
k = 1:N
x(k) = k;
y(k) = rand;
end
plot(x,y)
Parce que le rafraîchissement de l'affichage ne se fait qu'une fois que l'exécution du code est terminée.
MATLAB gère l'exécution du code et l'affichage dans des threads, séparément. L'exécution du code ayant toujours la priorité, les différents évènements qui surviennent durant son exécution (appui sur un bouton, sélection de menu, modification des tracés, etc.) sont mis dans ce que l'on nomme la « queue des évènements ». C'est-à-dire qu'ils s'empilent les uns après les autres, attendant que les précédents soient terminés.
Il existe cependant certaines situations où l'exécution du code est interrompue :
- lorsque l'on exécute l'une des fonctions figureDocumentation de la fonction figure, getframeDocumentation de la fonction getframe ou pauseDocumentation de la fonction pause ;
- lorsque l'on attend une action de l'utilisateur (fonctions waitforbuttonpressDocumentation de la fonction waitforbuttonpress, waitforDocumentation de la fonction waitfor, ginputDocumentation de la fonction ginput, inputDocumentation de la fonction input ou keyboardDocumentation de la fonction keyboard).
Ce qui a pour effet d'exécuter les évènements qui sont sur la file d'attente (incluant le rafraîchissement des graphiques).
On peut aussi forcer l'exécution de cette queue des évènements en appelant la fonction drawnowDocumentation de la fonction drawnow, fonction qu'il suffira d'insérer au sein de la boucle dans notre cas :
t = 0:pi/100:2*pi;
y = exp(sin(t));
h = plot(t,y, 'YDataSource'
, 'y'
);
for
k = 1:0.01:10
y = exp(sin(t.*k));
refreshdata(h,'caller'
)
drawnow
end
Interrompant l'exécution du code pour effectuer la mise à jour des graphiques à chaque itération afin de pouvoir en observer l'évolution, cette fonction est à éviter si l'on cherche les performances, on préférera effectuer l'affichage complet à la fin de la boucle dans ce cas.
Lorsque l'on rentre les noms des courbes, chaque appel à la fonction legendDocumentation de la fonction legend écrase l'éventuelle légende déjà présente. Vous ne pourrez donc pas juste ajouter une nouvelle entrée.
Une première solution consiste à conserver les données nécessaires dans un tableau de cellules au fur et à mesure des itérations et à faire appel à la fonction legend une fois la boucle terminée (ou au sein de la boucle si vous souhaitez en observer l'évolution) :
figure
hold all
for
k = 1:5
x = 1:8;
y = rand(1,8);
p(k) = plot(x,y);
leg{k} = sprintf('Courbe #%d'
, k);
end
legend(p,leg)
ou si vous connaissez à l'avance les noms, effectuer un seul appel après la boucle avec toutes les données :
figure
hold all
for
k = 1:5
x = 1:8;
y = rand(1,8);
p(k) = plot(x,y);
end
leg = {'A'
, 'B'
, 'C'
, 'D'
, 'E'
};
legend(p,leg)
et enfin, vous pourrez utiliser la propriété 'DisplayName'
de l'objet LineDocumentation objet Line :
x = linspace(0,2*pi,100);
N = 8;
hLine = zeros(N,1);
hold all
for
k = 1:N
y = sin(x-k*pi/4);
hLine(k) = plot(x,y, 'DisplayName'
, sprintf('sin(x - %d*\\pi/4)'
, k) );
end
legend(hLine)
Une dernière solution utilisant le paramètre non totalement documenté '-DynamicLegend'
est décrite dans les billets suivants :
Un objet Figure ne possède qu'une seule palette de couleur (colormap). C'est un tableau Mx3 avec une couleur RGB par ligne. Il est stocké dans la propriété ColormapDocumentation de la propriété Colormap de l'objet Figure de l'objet Figure.
Il existe cependant deux solutions pour contourner cette limitation afin d'utiliser plusieurs palettes de couleurs dans le même objet Figure.
La première consiste à utiliser des couleurs RGB indépendantes de la palette de couleurs. La deuxième consiste à assembler les différentes palettes dans une unique palette par concaténation.
-
La fonction ind2rgbDocumentation de la fonction ind2rgb permet de transformer des couleurs indexées en couleurs RGB. Par exemple, pour afficher deux images avec des couleurs indexées sur deux colormap différentes, vous pouvez faire comme ceci :
Sélectionnezim = imread(
'cameraman.tif'
,'tif'
); subplot(1,2,1), image(ind2rgb(im, hot(256))) subplot(1,2,2), image(ind2rgb(im, gray(256)))ou avec la fonction subimageDocumentation de la fonction subimage si vous possédez l'Image Processing Toolbox.
Sélectionnezsubplot(1,2,1), subimage(im, jet(256)) subplot(1,2,2), subimage(im, gray(256))
-
Vous pouvez concaténer plusieurs colormap dans une seule et utiliser chaque portion pour un graphique différent.
SélectionnezX = [1:64 ; 65:128 ; 129:192 ; 193:256]; subplot(2,2,[1 2]), image(X(1:2,:)) subplot(2,2,3), image(X(3,:)) subplot(2,2,4), image(X(4,:)) colormap( [jet(64) ; gray(64) ; hot(64) ; hsv(64)] );
SélectionneznbLevels = 64;
% 64 niveaux de couleurs dans chaque colormap
% Concaténation des deux colormap
% - colormap 1 (jet) a ses valeurs dans [ 1 64]
% - colormap 2 (hot) a ses valeurs dans [65 128]
colormap( [jet(nbLevels) ; hot(nbLevels)] )% Tracé du sinc
[X,Y] = meshgrid(-8:.5:8); R = sqrt(X.^2 + Y.^2) + eps; Z1 = sin(R)./R; h(1) = surf(Z1,'FaceColor'
,'interp'
,'EdgeColor'
,'none'
);% Permettre la superposition des deux tracés
holdon
% Tracé des "peaks"
[X,Y,Z] = peaks(30); Z2 = Z/10-1.5; h(2) = surf(X*5+15, Y*5+15, Z2,'FaceColor'
,'interp'
,'EdgeColor'
,'none'
);% limites inférieures /supérieures des valeurs de chaque tracé
clim1 = [min(Z1(:)) max(Z1(:))]; clim2 = [min(Z2(:)) max(Z2(:))];% Normalisation selon le nombre de niveaux
CData1 = round( (nbLevels-1) * (Z1-clim1(1)) / (clim1(2)-clim1(1)) ) + 1; CData2 = round( (nbLevels-1) * (Z2-clim2(1)) / (clim2(2)-clim2(1)) ) + 1;% Réajustement de l'indexage des couleurs
set(h(1),'CData'
, CData1); set(h(2),'CData'
, CData2 + nbLevels);
Vous pouvez utilisez cette contribution freezeColors/unfreezeColors de John Iversen qui vous permet de le faire aisément :
subplot(3,1,1), imagesc(peaks)
colormap hot
freezeColors
subplot(3,1,2), surf(peaks, 'EdgeColor'
, 'none'
)
colormap hsv
freezeColors
subplot(3,1,3), surf(peaks, 'EdgeColor'
, 'none'
)
colormap gray
En spécifiant son identifiant (handle) dans la fonction qui effectue le tracé.
Dans la majorité des fonctions servant à dessiner, vous pourrez trouver dans leur documentation les cas d'utilisation suivants :
fonction(axes_handle, …)
% ou :
fonction(…, 'PropertyName'
, PropertyValue, …)
Par défaut, les tracés sont effectués dans l'objet Axes courant, autrement dit celui qui a été manipulé par l'utilisateur ou créé en dernier. Ce handle particulier est représenté par gca. Si l'argument axes_handle n'est pas fourni, c'est alors gca qui est utilisé.
Si l'on souhaite désigner un objet Axes particulier, il faut alors fournir cet argument à la fonction.
Exemple :
axes_handle1 = subplot(3,1,1); % 1er objet Axes
axes_handle2 = subplot(3,1,2); % 2e objet Axes
subplot(3,1,3); % 3e objet Axes
% Tracé effectué par défaut dans le dernier créé (le troisième) car identifiant non spécifié
surf(peaks)
% Tracé effectué spécifiquement dans axes_handle1 (le premier)
plot(axes_handle1, rand(10,3))
% Tracé effectué spécifiquement dans axes_handle2 (le deuxième)
imagesc(rand(100), 'Parent'
, axes_handle2)
Lien : Qu'est-ce qu'un handle ?
Après avoir effectué votre tracé, vous pouvez ajouter un titre, du texte, une légende, des annotations… sur votre graphique. Voici un aperçu des possibilités :
Titre et étiquettes des axes (aperçu 2D / aperçu 3D)
- Le titre d'un objet Axes s'ajoute à l'aide de la fonction titleDocumentation de la fonction title ;
- Celui des axes x, y et z s'ajoute respectivement avec les fonctions xlabelDocumentation de la fonction xlabel, ylabelDocumentation de la fonction ylabel et zlabelDocumentation de la fonction zlabel ;
-
Code de l'aperçuCacher/Afficher le codeSélectionnez
- Lien utile : Titles and Labels.
Légende (aperçu)
- La légende donnant la correspondance couleur/forme de tracé - nom s'ajoute avec la fonction legend ;
-
Code de l'aperçuCacher/Afficher le codeSélectionnez
- Liens utiles : Specify Legend Descriptions During Line Creation.
Texte libre (aperçu)
- L'affichage de texte, ou de formule n'importe où au sein de l'objet Figure se fera à l'aide de la fonction textDocumentation de la fonction text (ou gtextDocumentation de la fonction gtext permettant un placement manuel) ;
-
Code de l'aperçuCacher/Afficher le codeSélectionnez
- Lien utile : Add Text to Specific Points on Graph.
Annotations (aperçu)
-
Les annotations, créées à partir de la fonction annotationDocumentation de la fonction annotation, pourront servir à mettre en évidence des éléments précis à l'aide des diverses formes suivantes :
- ligne : Annotation LinePropriétés de l'objet Annotation Line ;
- simple flèche : Annotation ArrowPropriétés de l'objet Annotation Arrow ;
- double flèche : Annotation DoublearrowPropriétés de l'objet Annotation Doublearrow ;
- ellipse : Annotation EllipsePropriétés de l'objet Annotation Ellipse ;
- rectangle : Annotation RectanglePropriétés de l'objet Annotation Rectangle ;
- texte au bout d'une flèche : Annotation TextarrowPropriétés de l'objet Annotation Textarrow ;
- texte encadré : Annotation TextboxPropriétés de l'objet Annotation Textbox.
-
Les annotations ont pour parent l'objet Figure et non l'objet Axes. Pour faciliter leur placement dans le repère de l'objet Axes, on utilisera la fonction dsxy2figxy présente dans cette contribution du FEX ainsi que dans le dossier retourné par la commande :
Sélectionnez[docroot
'/techdoc/creating_plots/examples'
] -
Code de l'aperçuCacher/Afficher le codeSélectionnez
Échelle de couleurs (aperçu)
- Lors de l'utilisation de palettes de couleurs (colormap), vous pouvez vouloir avoir les valeurs ou étiquettes correspondantes aux couleurs du tracé, la fonction colorbarDocumentation de la fonction colorbar est là pour ça.
-
Code de l'aperçuCacher/Afficher le codeSélectionnez
Pour les éléments affichant du texte, la fonction texlabelDcomentation de la fonction texlabel pourra faciliter l'écriture de formules TeX.