[Matlab] Creare e posizionare correttamente una figura sullo schermo con ScreenSize e position
Vediamo come creare e posizionare correttamente una figura sullo schermo.
Innanzitutto rileviamo le dimensioni del nostro schermo:
>> scrsz = get(0,’ScreenSize’) scrsz = 1 1 1152 864
Il get della proprietà ScreenSize restituisce la dimensione dello schermo in un vettore, di cui la terza componente è la larghezza e la quarta è l’altezza.
ScreenSize is a four-element vector: [left, bottom, width, height]
Anche position è un vettore di quattro componenti [left, bottom, width, height].
Quindi settando la proprietà ‘position’ di figure è possibile impostare la posizione e le dimensioni della figura.
figure(‘Position’,[1 scrsz(4)/2 scrsz(3)/2 scrsz(4)/2])
Con questo comando creiamo una finestra nella parte alta sinistra dello schermo e grande un quarto delle dimensioni. Infatti dista 1px da sinistra (left=1) e metà dell’altezza dello schermo dal basso (bottom=scrsz(4)/2), ed è grande mezzo schermo (width=scrsz(3)/2 , height=scrsz(4)/2)
Se vogliamo rimpicciolirla leggermente possiamo togliere qualche decina di pixel alle dimensioni e possiamo scostarla un poco dai bordi:
figure(‘Position’,[10 (scrsz(4)/2-50) (scrsz(3)/2-50) (scrsz(4)/2-50)]);
Alternativamente possiamo utilizzare delle misure relative impostando la proprietà unità su normalizzata, così facendo le misure di posizione e dimensioni varieranno sempre tra 0 e 1:
set(1,’Units’, ‘normalized’)
set(1,’Position’, [.05 0.05 0.9 0.8])
Con questi comandi ho impostato la figura distante dai bordi del 5% ed è grande il 90% dello schermo in larghezza e l’80% in altezza.
grazie, molto utile
Prego ^_^
molto utile davvero!! ma se volessi posizionare due finestre una in alto a destra e l’altra a sinistra? Come dovrei fare?
Ho provato:
fig1=figure(1);
set(fig1,’Units’, ‘normalized’)
set(fig1,’Position’, [0 0.5 0.5 0.5])
…
plot
…
fig2=figure(2);
set(fig2,’Units’, ‘normalized’)
set(fig2,’Position’, [0.5 0.5 0.5 0.5])
…
plot
…
ma le posiziona entrambe al cento.
in teoria dovrebbe funzionare, l’unica cosa che potrebbe creare fastidio sono gli apici singoli che anche nell’articolo sono diventati “apici obliqui”. A parte questo anche il tuo script è scritto bene.
Eccone una versione che fa tutto:
x=[0:1:100];
fig1 = figure (1)
plot(x,x.^2)
set(fig1,’Units’, ‘normalized’)
set(fig1,’Position’, [0 0.5 0.5 0.5])
fig2 = figure (2)
plot(x,x.^0.5)
set(fig2,’Units’, ‘normalized’)
set(fig2,’Position’, [0.5 0.5 0.5 0.5])
In alternativa esistono anche i subplot per mettere direttamente i due grafici in un unica figura:
figure(3)
subplot(1,2,1)
plot(x,x.^2)
title(‘Sottografico 1’)
grid on
subplot(1,2,2)
plot(x,x.^0.5)
title(‘Sottografico 2′)
grid on
set(gcf ,’Units’, ‘normalized’)
set(gcf ,’Position’, [0.05 0.05 0.9 0.35])
ti ringrazio molto per la tua risposta :D
si sapevo sei subplot, ma preferisco le 2 finestre separate.
ho provato la versione che mi hai postato ma come la mia ha gli stessi effetti e non funziona…sono sicuro a questo punto che sia un problema di diversa natura che non permette allo script di funzionare…o la versione di matlab (la 7 nel mio caso!) non interpreta bene questo script, o qualche impostazione di sistema…non saprei. Però almeno ora sono sicuro che entrambi i nostri codici sono scritti bene e avrebbero dovuto funzionare, ma per qualche ignoto problema non funzionano!
Grazie di nuovo, se riesco a risolvere ti farò sapere ;)
Ti ho inviato una mail con il listato, sperando che funzioni….
ho provato lo script, niente da fare! vengono stampati i 2 plot più il subplot uno sopra l’altro, ingnorando completamente i settaggi per il posizionamento…l’arcano persiste!!!
con il subplot alla fine si risolve anche, perchè per forza di cose i due plot li affianca…ma ora è una questione di principio!! perchè non funziona l’affiancamento delle 2 finestre??? eppure il codice parla chiaro!