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)
,
où
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
etYTickLabel.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, %
% https://xymaths.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, %
% https://xymaths.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)