Orion42 ~IT made easy~

Giving feedback, alpha testing and solving common problems with out of the box and lateral thinking

Matlab-it

[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.

8 COMMENTS

  1. 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.

  2. 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 ;)

  3. 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!

Rispondi a Simone Annulla risposta

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Skip to content