Programmation en Matlab

TickLabel personnalisés


XTickLabel et YTickLabel n'acceptent pas de commandes LaTex (au contraire de title, legend ...).
Il faut se débrouiller autrement. L'idée présentée ici utilise la commande text qui permet d'insérer du texte dans une figure Matlab:

>>text(x,y,str),

x et y sont les coordonnées de l'emplacement du texte (en accord avec les échelles en abscisse et ordonnée du graphique, cf axis), et str est la chaîne de caractère (string) que l'on souhaite insérer.
L'avantage est que l'on peut alors librement utiliser l'interprétation LaTex (et bien d'autres options..., voir help text):

>>text(x,y,str,'interpreter','LaTex')

Il reste alors à effacer les labels proposés par défaut par Matlab, et créer ses propres labels que l'on positionne de manière adéquate.

Les programmes suivants permettent d'utiliser des commandes LaTeX dans les fonctions Matlab XTickLabel et YTickLabel, et de placer ces labels où bon nous semble.

Trois programmes sont donnés et utilisés:
  • les deux fonctions XTickLabel.m et YTickLabel.m, respectivement pour les labels en abscisse et en ordonnée;
  • un script test_XYLabel.m, exemple d'utilisation des deux premières fonctions.

Fonction XTickLabel

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Fonction XTickLabel permettant de placer                              %
%  des labels sur l'axe des x incluant des                              %
%  commandes LaTex.                                                     %
%                                                                       %
%   Fonction creee par Y. Morel,                                        %
%   http://xymaths.free.fr/Matlab/                                      %
%                                                                       %
% Usage: XTickLabel(XTL,XTLpos,f)                                       %
%   XTL={'str1' 'str2' 'str3' ...};                                     %
%      les chaines de caracteres à utiliser comme labels                %
%   XTLpos=[x1 x2 x3 ...];                                              %
%       les abscisses ausquelles placer ces labels                      %
%   f: le numero de la figure active sur laquelle placer ces labels     %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function XTickLabel(XTL,XTLpos,f)
ax=axis;
xliminf=ax(1);xlimsup=ax(2);
yliminf=ax(3);ylimsup=ax(4);
axis([xliminf xlimsup yliminf ylimsup]);


set(get(f,'CurrentAxes'),'XTick',0:3)

NXTL=length(XTL);                           % nbre de XTickLabel
%XTLpos=xliminf:(xlimsup-xliminf)/(NXTL-1):xlimsup;

set(get(f,'currentaxes'),'xticklabel',[])

ypos=yliminf-(ylimsup-yliminf)/30;          % position des labels 
                                            % sous l'axes des abscisses

for ii=1:NXTL
    text(XTLpos(ii),ypos,XTL{ii},...
            'interpreter','latex','fontsize',14)
end

set(get(f,'CurrentAxes'),'XTick',xliminf:(xlimsup-xliminf)/NXTL:xlimsup);

set(get(f,'currentaxes'),'xtick',XTLpos)

end


et de même pour YTickLabel.m:

Fonction YTickLabel

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Fonction YTickLabel permettant de placer                              %
%  des labels sur l'axe des y incluant des                              %
%  commandes LaTex.                                                     %
%                                                                       %
%   Fonction creee par Y. Morel,                                        %
%   http://xymaths.free.fr/Matlab                                       %
%                                                                       %
% Usage: YTickLabel(YTL,YTLpos,f)                                       %
%   YTL={'str1' 'str2' 'str3' ...};                                     %
%       les chaines de caracteres a utiliser comme labels               %
%   YTLpos=[y1 y2 y3 ...];                                              %
%       les ordonnees ausquelles placer ces labels                      %
%   f: le numero de la figure active sur laquelle placer ces labels     %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function YTickLabel(YTL,YTLpos,f)
    
ax=axis;
xliminf=ax(1);xlimsup=ax(2);
yliminf=ax(3);ylimsup=ax(4);
axis([xliminf xlimsup yliminf ylimsup]);


set(get(f,'CurrentAxes'),'YTick',0:3)

NYTL=length(YTL);                           % nbre de XTickLabel
%YTLpos=yliminf:(ylimsup-yliminf)/(NYTL-1):ylimsup;

set(get(f,'currentaxes'),'yticklabel',[])

ypos=xliminf-(xlimsup-xliminf)/10;          % position des labels 
                                            % sous l'axes des abscisses

for ii=1:NYTL
    text(ypos,YTLpos(ii),YTL{ii},...
            'interpreter','latex','fontsize',14)
end

set(get(f,'CurrentAxes'),'YTick',yliminf:(ylimsup-yliminf)/NYTL:ylimsup);

set(get(f,'currentaxes'),'ytick',YTLpos)

end


On peut alors utiliser ces fonctions pour obtenir par exemple:


en appelant ces deux fonctions XTickLabel & YTickLabel:

Script test_XYLabel.m

clear all;close all;
%% 1er exemple: 
figure(10),clf,whitebg('w')

x=-0.5:0.01:7;
y=sqrt(2)*(2*sin(x)+1);

plot(x,y);
%axis([-0.5 7 -2 5]);   % On peut les limites des axes à la main, ou non


XTL={'0' '$\frac{\pi}{2}$' '$\pi$' '$\frac{3\pi}{2}$' '$2\pi$'};
XTLpos=[0 pi/2 pi 3*pi/2 2*pi];
XTickLabel(XTL,XTLpos,10);

YTL={'-$\sqrt{2}$' '0' '$\sqrt{2}$' '$2\sqrt{2}$' '$3\sqrt{2}$'};
YTLpos=[-sqrt(2) 0 sqrt(2) 2*sqrt(2) 3*sqrt(2)];
YTickLabel(YTL,YTLpos,10)

TITLE='Courbe repr\''esentative de $f:x\mapsto \sqrt{2}(2\sin(x)+1)$';
title(TITLE,'interpreter','latex','fontsize',18);

%% 2eme exemple: 
figure(11),clf,whitebg('w')

x=-5:0.01:15;
y=1e3*cos(x).*exp(x/5);y=abs(y);

plot(x,y);

YTL={'0' '$5.10^3$' '$10^{4}$' '$1,5.10^{4}$'};
YTLpos=[0 5e3 1e4 1.5e4];
YTickLabel(YTL,YTLpos,11)


TITLE='Courbe repr\''esentative de $f:x\mapsto 10^3|e^{x/5}\cos x |$';
title(TITLE,'interpreter','latex','fontsize',18)


Voir aussi:
Haut de la page Lien