MATLAB figur handles
I MATLAB styres mange ting i baggrunden med såkaldte handles. Disse handles er strukturer der indeholder information om det objekt som de peger på, f.eks. en figur. Hvis man gerne vil ændre fontstørrelsen i labelteksterne, punktstørrelsen i et datasæt, eller tykkelsen af gridlines - så er det her man skal ind og ændre ting.
Contents |
Sådan får du fat handle
En typisk simpel figur kan laves med koden
x = 0:0.01:2*pi;
y = sin(x);
figure
plot(x,y)
axis([0 2*pi -1 1])
xlabel('x','FontSize',14)
ylabel('sin(x)','FontName','Times')
title('Et plot af sinus','FontWeight','b')
Her er akserne blevet manuelt sat, og diverse formateringer, så som skriftstørrelser og fonte, er blevet valgt. Men hvad hvis man gerne vil formatere figuren mere, og ikke har kommandoer der kan gøre det sammen med funktioner som xlabel
, title
osv.?
Man finder i stedet figurens handle, og bruger denne til at lave sine formateringer. Lad os sige at figuren der lige er blevet lavet hedder figur 1 i MATLAB. For at fortælle programmet at det er denne figur der skal arbejdes med, køres kommandoen
figure(1)
Herefter kan man finde sit handle med gca
funktionen, der giver links til figur 1's akse-handle.
h = gca;
For at få et overblik over hvilke egenskaber dette handle indeholder, kan man bruge get()
funktionen, der udskriver de forskellige værdier der ligger i handle-strukturen.
get(h)
Med disse kan man f.eks. se at handlen indeholder
XScale = linear
så $x$-aksen er altså lineær. Hvis man gerne vil have en liste der viser hvilke værdier alle disse objekter kan tage, så brug i stedet
set(h)
Her vil man f.eks. se
XScale = XScale: [ {linear} | log ]
der fortæller at XScale
kan være enten linear
eller log
, og at linear
er default værdien.
At finde handle for titel, labels, osv.
Men hvad nu hvis man gerne vil have fat i handlen for f.eks. sin titel, der blev lavet med title()
kommandoen tidligere? Man beder simpelthen om at få handle for denne ved
ht = get(g,'title')
Nu kan man igen bruge get()
og set()
på ht
for at se hvad den indeholder.
Den simpleste måde at få handle til et bestemt objekt er dog bare at definere handle-linket når man laver objektet. F.eks. kunne man have fået ht
allerede da man skrev titlen, ved i stedet at have skrevet
ht = title('Et plot af sinus','FontWeight','b')
Handle for et datasæt findes da også nemmest ved bare at definere det når man plotter, f.eks. kunne man have valgt at skrive
hp = plot(x,y);
i stedet for kun plot(x,y)
.
At ændre noget i handle
For at ændre en værdi i handle-strukturen skal man bruge set()
funktionen på sit handle, og man skal kende navnet på det man vil ændre.
Hvis man f.eks. vil ændre skalaen på $x$-aksen til at være logaritmisk i stedet for lineær, skal man bruge kommandoen
set(h,'XScale','log')
Man kan også ændre f.eks. titlens font ved
set(ht,'FontName','Times')
Egenskaber for plot-linier og punkter
En vigtig ting man oftest gerne vil bruge handles til, er at ændre linie-udseender, som f.eks. tykkelse, farve og type. Hvis handle for plottet blev sat til hp
som vist ovenfor, kan man f.eks. sætte tykkelsen af linien med
set(hp,'LineWidth',2.9)
En fuld liste med egenskaber for linien kan selvfølgelig findes ved at bruge get(hp)
. Bemærk at det også er denne der skal bruges hvis man vil ændre punkt-størrelse osv. hvis man plotter sine data som punkter i stedet for en linie.