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