Lez 2 - MATLAB

Transcription

Lez 2 - MATLAB
Lez. 3 – I grafici in MatLab
Prof. Giovanni Mettivier
1
Dott. Giovanni Mettivier, PhD
Dipartimento Scienze Fisiche
Università di Napoli “Federico II”
Compl. Univ. Monte S.Angelo
Via Cintia, I-80126, Napoli
mettivier@na.infn.it
+39-081-676137
2
Per default MATLAB traccia grafici sulla
finestra 1
Se si vogliono aprire più finestre grafiche
occorre digitare il comando figure (n)
dove n definisce il numero della finestra
La chiusura della finestra n-esima avviene
con il comando close (n)
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 3
: crea una nuova finestra per la
figura
plot(x) : disegna un linea dei valori in base
alla loro posizione nel vettore
plot(x,y) : disegna una linea con coordinate
xey
plot(x,y,'r--')
: disegna una linea specificando lo
stile, il colore. Etc.
figure
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 4
Se x è un vettore contenente le ascisse dei
punti di un fissato insieme di coppie del
piano e y è il vettore delle corrispondenti
ordinate, plot (x,y) disegna la spezzata
congiungente tali punti
Esempio
>> x = [0:pi/200:2*pi];
>> y = sin(x);
>> plot (x,y)
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 5
La funzione plot è in grado di tracciare le
curve impiegando svariati simboli:
Esempio:
>> x = [0:0.01: 2*pi];
>> y = sin(x) + cos(2*x);
>> plot (x,y,’s’)
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 6
La sintassi di plot nel caso in cui si vogliano
utilizzare simboli, colori o tipi diversi di linee è
la seguente:
Plot ((x,y, ‘stile’)
Linea continua –
Linea tratteggiata
–
Linea
punteggiata :
Linea tratto
punto -.
Punto .
Più +
Cerchio o
Stella *
Croce x
Quadrato s
Rosso r
Verde g
Blu b
Bianco w
Invisibile i
Esempio:
>> plot (x,y, ‘b+:’)
Traccia una linea blu e punteggiata, con il
simbolo + in corrispondenza di ogni valore)
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 7
Per creare degli assi cartesiani si usa la funzione axis
>> axis ([x-min, x-max, y_min, y_max])
>> axis (‘string’)
Nella prima forma si impongono i limiti inferiore e
superiore degli assi cartesiani
Nella seconda forma, ‘string’ indica l’aspetto degli assi;
Ad esempio:
string = square; per avere i due assi uguale
string = normal; per sfruttare tutto lo schermo
string = auto; restituisce l’asse in scala default, in
maniera automatica
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 8
La funzione hold conserva il riferimento di
assi cartesiani e il corrispondente grafico già
esistente; il grafico successivo verrà
sovrapposto al precedente.
Si usa nella forma
>> Hold on
>> Hold off
Esempio
>> x = [0:0.01: 2*pi];
>> y = sin(x) + cos(2*x);
>> plot (x,y);
>> hold on
>> plot (x,y,’s’)
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 9
E’ possibille riportare sulla stessa figura più
funzioni rappresentate da diverse coppie (x,y)
Esempio
>> x = [0 : pi/200 : 2*pi];
>> y = sin (x);
>> y = sin (x- .40);
>> y = sin (x - .8);
>> y = sin (x – 1.2);
>> plot (x,y,x,y2,x,y3,x,y4)
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 10
Le istruzioni xlabel, ylabel e title etichettano gli assi e la
figura.
>> plot(glon,glat)
>> xlabel('Longitude'),ylabel('Latitude')
>> title('Flight Track : CW96 960607')
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 11
La funzione text permette di scrivere una
didascalia sul grafico
>> text (x,y, ‘testo’)
dove x,y sono le coordinate da cui inizierà il
testo, sapendo che (0,0) è l’angolo in basso
a sinistra e (1,1) quello in alto a destra
Esempio
>> text (x,y, ‘grafico’);
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 12
Grafici tridimensionali sono tipicamente tracciati per
mezzo delle funzioni plot3, mesh e surf.
La plot3 consente di tracciare una curva nello spazio a
partire dalle sue equazioni parametriche.
Esempio
Dalle equazioni parametriche dell’elicoide
 x = sin t

 y = cos t
z = t

>> t = [0:pi/50:10*pi];
>> plot3 (sin(t), cos(t), t);
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 13
>>
>>
>>
>>
plot3(glon,glat,palt,'linewidth',2)
grid
xlabel('Longitude'),ylabel('Latitude')
zlabel('Altitude (m)')
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 14
Il comando subplot(m,n,p) divide la finestra corrente in m
righe, n colonne e seleziona la finestra p-esima,
Ad esempio:
>> subplot (2,2,3)
Spezza la finestra in quattro sottofinestre e seleziona
quella in basso a sinistra (riga 2, colonna 1)
Il comando subplot(m,n,p) deve essere, dunque usato
prima del plot, per fornire informazioni sulla sottofinestra in
cui visualizzare il grafico desiderato
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 15
>> subplot(2,3,1);
P=1
P=2
P=3
>> subplot(2,3,4);
n
P=4
m
_________________________________________________________________________________________________
16
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier
: disegna i bordi di una
matrice Z
contour(Z,n) : disegna n bordi (n = integer)
contour(Z,v) : disegna i bordi di un dato
valore specificato da un
vettore v
contour(X,Y,Z) : disegna i bordi su una
griglia specificata da X e Y
contour(Z)
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 17
: disegna i contorni con un
dato colore
clabel(C,h)
: aggiunge etichette ai bordi
clabel(C,h,v) : aggiunge etichette solo ai
bordi specificati nel vettore v
clabel(C,h,'manual')
: aggiunge etichette ai bordi
nelle locazioni specificate
dal mouse
contourf(Z)
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 18
>> peaks;
Peaks is an example function, useful for demonstrating 3D
data, contouring, etc. Figure above is its default output.
P=peaks; - return data matrix for replotting…
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 19
>> P = peaks;
>> contour(P)
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 20
>> contour(P,[-9:0.5:9])
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 21
>> [C,h]=contour(P);
>> clabel(C,h);
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 22
>> contourf(P,[-9:0.5:9]);
>> colorbar
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 23
Le superfici aono colorate scalando i dati nel
range della colormap definita. La colormap si
applica a tutta la figura.
Esistono molte colormaps predefinite ('jet' (the
default), 'warm','cool','copper','bone','hsv').
>> colormap mapname
>> colormap('mapname')
La corrente colormap può essere conosciuta
con
>> map=colormap
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 24
>> colormap cool
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 25
>> caxis([0 8])
>> colorbar
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 26
Le colormap sono semplicemente matrici con 3
colonne di lunghezza arbitraria (default = 64
righe). Ogni riga contiene le componenti [RED
GREEN BLUE] del colore richiesto, specificato
nella scala 0→1.
e.g.
>> mymap = [ 0
0
0.1
0
0.1 0.2
0.1 0.2 0.3
.
.
.
.
.
. ]
>> colormap(mymap)
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 27
Ogni oggetto grafico ha proprietà che possono
essere modificate.
es. per una linea: colour, width, line style, marker
style, stacking order on plot,…
Molte proprietà possono essere modificate
attraverso una finestra. Gli strumenti
utilizzabili dipendono dalla versione che si
utilizza.
Più utili da usare sono i comandi in linea - più
veloci, e possono essere inclusi in scripts o
funzioni per automatizzare dei processi.
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 28
Object select
Add/edit text
Add arrow & line
zoom
3D rotate
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 29
La funzione ginput fornisce i valori dei punti
sezionati dal cursore sul grafico
– seleziona n valori
– seleziona valori fino a
quando non è premuto il
tasto return
NB. ginput lavora sugli assi definiti, e ritornerà
valori esterni agli assi visibili se sono selezionati
punti esterni al frame.
>> [x,y] = ginput(n)
>> [x,y] = ginput
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 30
Il comando
>> print
invia la figura selezionata alla stampante di
default.
>> print –fn
stama la fugura numero n sulla stamapante di
default
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 31
Una enorme quantità di file format per la
stampa sono supportati; la forma generale è:
>> print –driver –options filename
e.g.
>> print –dps filename
print postscript file
>> print –dpsc filename
print colour postscript file
>> print –depsc filename
print colour encapsulated postscript file
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 32
>> print –djpeg filename
print JPEG file (a BAD file format for
almost any figure)
>> print –dpng –r200 filename
print PNG file at 200dpi.
L’opzione –rnnn specifica la risoluzione di
stampa (default = option to specify print 150
dpi)
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 33
.png
.jpg
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 34
Le funzioni hgsave e hgload salvano e caricano
una figura da un file .fig – questo contiene la
descrizione grafica della figura, che può essere
poi esere modificata in un secondo momento.
NB: le variabili usate per creare la figura non
sono salvate.
>> hgsave(gcf,'filename')
>> hgload('filename.fig')
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 35
Le slides seguenti mostrano lo sviluppo di una
figura moderatamente complessa dai dati
acquisiti:
misurazioni di un aereo a bassa quota della
metereologia di base mediate su intervalli di 5
km lungo il volo.
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 36
>> load /cw96/jun07/jun07_all_5km_means.mat
>> who
Your variables are:
mQ
mlat
mlon
msst
mtheta
mv
mws
mthetav
mu
>> plot(mlon,mlat,'o')
>> print -dpng -r100 figures/grid-1-data-points
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 37
>>
>>
>>
>>
>>
>>
>>
[XX,YY]=meshgrid([-125.2:0.05:-124],[39.9:0.05:40.8]);
gmws=griddata(mlon,mlat,mws,XX,YY);
pcolor(XX,YY,gmws); shading flat;
hbar=colorbar;
hold on
h1=plot(mlon,mlat,'ko');
print -dpng -r100 figures/grid-2-wind-field
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 38
>>
>>
>>
>>
>>
gu=griddata(mlon,mlat,mu,XX,YY);
gv=griddata(mlon,mlat,mv,XX,YY);
quiver(XX,YY,gu,gv,'k-');
set(h1,'markeredgecolor','r','markersize',5)
print -dpng -r100 figures/grid-3-wind-field-and-vectors
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 39
>>
>>
>>
>>
>>
>>
>>
>>
>>
set(gca,'linewidth',2,'fontweight','bold')
xlabel('Longitude'); ylabel('latitude')
set(hbar,'linewidth',2,'fontweight','bold')
set(get(hbar,'xlabel'),'string','(m s^{-1})','fontweight','bold')
xlabel('Longitude'); ylabel('latitude')
title('CW96 : June 07 : 30m wind field')
load mendocinopatch.mat
patch(mendocinopatch(:,1),mendocinopatch(:,2),[0.9 0.9 0.9])
print -dpng -r100 figures/grid-4-wind-field-and-vectors-and-coast
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 40
% generate movie frames from LEM fields
[XX,ZZ]=meshgrid(X,Z(iz));
[YY,ZZ]=meshgrid(Y*0,Z(iz));
ZH=ones([102 102])*Z(3);
for n=4:33
data1=Q012D_K3{n};
data2=Q012D_I50{n}(iz,:);
surf(X,Y,ZH,data1);shading flat;
set(gca,'xticklabel',{},'yticklabel',{},'zticklabel',{});
set(gca,'xlim',[min(X) max(X)],'ylim',[min(Y) max(Y)])
hold on
surf(XX,YY,ZZ,data2);shading flat;
set(gca,'zlim',[0 max(Z(iz))])
Qframes(n-3)=getframe;
% NB first n=4, force frames index to
hold off
% start at 1 to avoid empty frames
End
% play movie in matlab
axis([0 1 0 1 0 1])
set(gca,'visible','off')
movie(Qframes,5)
% save movie to AVI file
movie2avi(Qframes,'testavi.avi','compression','none')
_________________________________________________________________________________________________
Lez 2 - MATLAB - GRAFICI
Giovanni Mettivier 41