Sei sulla pagina 1di 29

Assegnazione di

funzioni e comandi
grafici

Daniele LEREDE, Laura SAVOLDI


Lettura e scrittura di files esterni

Scrittura di files:
Il comando writematrix trascrive una matrice generata in
MATLAB in un file Excel:
writematrix(matrice,‘nome_file.xlsx’)

Lettura di files:
Il comando readmatrix genera una matrice in MATLAB a
partire da un foglio Excel (.xlsx):
readmatrix(‘nome_file.xlsx’)

Esempio
Funzioni (I)

Le funzioni in MATLAB possono essere utilizzate per favorire:


• Riusabilità:
▪ Scrivo una sola volta un codice utilizzato spesso
▪ Modifiche e correzioni sono facilmente gestibili
• Leggibilità:
▪ Incorporo porzioni di codice complesse
▪ Aumento il livello di astrazione del codice
• Flessibilità:
▪ Posso aggiungere nuove funzionalità non presenti nelle
funzioni ‘di libreria’ standard
Funzioni (II)

Opzione 1:
• Tramite uno script dedicato da cui richiamare la funzione quando
necessaria (lo script dedicato DEVE avere lo stesso nome della
funzione e DEVE essere nella stessa directory dello script in uso):
function [output1,...] = nome_funzione(input1,...)
istruzioni;
end
salva lo script come nome_funzione.m e potrai usarlo in
qualunque altro nuovo script:
variabili=[i j k];
risultato=nome_funzione(variabili) Esercizio 1
Funzioni (III)

Opzione 2:
• Dichiara una funzione anonima all’interno dello stesso script in cui ti
serve utilizzarla (utile per funzioni semplici):

funzione=@(input)(istruzioni)
input=[x y z];
output=funzione(input)

La funzione non sarà poi disponibile in un altro script a meno che non
sia dichiarata di nuovo.
Esercizio 1
+ Esercizio 5
Comandi grafici (I)

Esistono principalmente due tipi di comandi grafici:


• plot(x,y): genera un grafico in cui i valori contenuti nel vettore y
sono rappresentati rispetto ai valori di x. Solitamente utilizzato per
rappresentare grafici di funzioni. Simili a plot, si possono utilizzare
loglog/semilogx/semilogy per grafici con assi logaritmici, ed
errorbar per presentare una stima degli errori rispetto a dati
sperimentali.
• bar: genera un grafico a barre
Comandi grafici (II) - Plot

La funzione base per generare grafici in MATLAB è:


• plot(x,y): genera un grafico in cui i valori contenuti nel vettore y
sono rappresentati rispetto ai valori di x. Solitamente utilizzato per
rappresentare grafici di funzioni:

xx=0:10; Questo grafico


TT=xx.^2+xx+1; base non è molto
plot(xx,TT) ‘professionale’…
Vediamo come
possiamo
migliorarlo
Comandi grafici (III) - Plot

Un grafico professionale dovrebbe sempre riportare le etichette


degli assi, con le relative unità di misura, che si possono assegnare
tramite i comandi xlabel(‘testo’) e ylabel(‘testo’), che
vanno eseguiti dopo il plot!
xx=0:10;
TT=xx.^2+xx+1;
plot(xx,TT)
xlabel('x [mm]')
ylabel('Temperatura [°C]’)
Non è necessario un titolo se
abbiamo le etichette degli assi
Comandi grafici (IV) - Plot

Il comando grid on visualizza le linee di una griglia in


corrispondenza dei segni di graduazione degli assi.
Aggiungendo ‘linewidth’,## al plot modifichiamo lo spessore
del plot.

xx=0:10;
TT=xx.^2+xx+1;
plot(xx,TT,’linewidth’,2)
xlabel('x [mm]')
ylabel('Temperatura [°C]’)
grid on
box on % impostaz. di default
Comandi grafici (V) - Plot

MATLAB imposta automaticamente i valori minimo e massimo per


gli assi, ma si possono modificare con xlim([xmin xmax]) e
ylim([ymin ymax]).

xx=0:10;
TT=xx.^2+xx+1;
plot(xx,TT,’linewidth’,2)
xlabel('x [mm]')
ylabel('Temperatura [°C]’)
grid on
box on
xlim([2 2.5])
ylim([0 20])
Comandi grafici (VI) - Plot

Si può (si deve) modificare la grandezza del font lungo gli assi per
una migliore leggibilità:

...
plot(xx,TT,’linewidth’,2)
...
ax=gca;
ax.FontSize=16

% oppure

set(gca,'fontsize',16)
Comandi grafici (VII) - Plot

Si possono sovrapporre più di due plot in un’unica figura, usando il


comando hold on dopo il primo plot

...
plot(xx,TT,’linewidth’,2)
...
hold on

TT2=2*xx+20;
plot(xx,TT2,’linewidth’,2)
Comandi grafici (VIII) - Plot

La funzione plot può ricevere altri argomenti: il primo successivo


ad ogni coppia x,y e modifica il colore, lo stile della linea, ed
eventuali simboli utilizzati come marker.

Colore Stile linea Marker


‘y’ Giallo ‘-’ Solid ‘o’ Cerchio
‘m’ Magenta ‘--’ Dashed ‘.’ Punto
‘c’ Ciano ‘:’ Dotted ‘s’ Quadrato
‘r’ Rosso ‘-.’ Dash-dot ‘d’ Diamante
‘g’ Verde
‘b’ Blu
‘w’ Bianco
‘k’ Nero
Comandi grafici (IX) - Plot

Altri argomenti possono modificare il colore del plot indicando una


tripletta RGB/codice HEX (oltre i colori ‘standard’ della slide
precedente), la taglia dei marker, il loro colore e il colore del bordo.

...
plot(xx,TT,'b-
d','linewidth',2,'markersize',3,
'markerfacecolor’,’b')
...
plot(xx,TT2,'-.','color',[0 153
0]./255,'linewidth',2)
Comandi grafici (X) - Plot

La legenda è un elemento importante quando si ha più di un plot:


• Si può dichiarare direttamente nello statement ‘legend’

...
plot(xx,TT,...) Mai
... sovrapporre il
plot(xx,TT2,...) box della
... legenda al
legend(‘T1’,’T2’) plot!
Comandi grafici (XI) - Plot

Per posizionare la legenda in modo da non coprire il plot possiamo


utilizzare le istruzioni:
• ‘location’ indica il posto in cui posizionare la legenda:
▪ ‘north’ ▪ ‘northeast’ ▪ ‘northeastoutside’
▪ ‘south’ ▪ ‘northwest’ ▪ ‘southeastoutside’
▪ ‘west’ ▪ ‘southeast’ ▪ ‘eastoutside’
▪ ‘east’ ▪ ‘southwest’ ▪ ‘bestoutside’
▪ ‘best’
• ‘orientation’ indica l’orientazione delle voci della legenda:
▪ ‘horizontal’
▪ ‘vertical’
Comandi grafici (XII) - Plot

La legenda è un elemento importante quando si ha più di un plot:


• Si può dichiarare plot per plot usando ‘-dynamiclegend’

...
plot(xx,TT,...,’displayname’,’T1’)
...
plot(xx,TT2,...,’displayname,’T2’)
legend('-dynamiclegend’,
’location’,’northeastoutside’)
% ‘orientation’,’vertical’
impostazione di default
Comandi grafici (XIII) - Plot

Per stampare una figura occorre definirla prima come oggetto, con
la possibilità di gestirne anche le dimensioni relative allo schermo.
figure('units','normalized','outerposition',[0 0 0.6 1])
f1=figure(1)
...
plot(x,y,...) Larghezza Altezza
...
print –f1 –depsc nome_figura

Identificatore figura Definizione formato: in questo caso .eps (vettoriale)


https://ghostscript.com/download/gsdnld.html
Comandi grafici (XIV) - Plot

Possiamo plottare più grafici diversi in una singola figura, ma in


diversi subplot, definiti ognuno da un titolo in ordine alfabetico
(title(‘(a)’),...).

La legenda va definita per ogni singolo subplot.


...
subplot(n_righe,n_colonne,posizione)
plot(x,y,...)
...
subplot(n_righe,n_colonne,posizione)
plot(x,y,...)
... Esercizio 3
Comandi grafici (XV) - Plot

Il comando yyaxis può essere utilizzato per plottare due o più


curve usando scale diverse sull’asse y. Può tornare utile per
visualizzare due variabili correlate ma aventi diversa unità di misura
o ordine di grandezza. Tutte le istruzioni di plot possono essere
utilizzate selezionando alternativamente l’asse y sinistro o destro.
...
yyaxis left
plot(x,y1,...)
...
yyaxis right
plot(x,y2,...)
...
Comandi grafici (XVI) – Scala logaritmica

I grafici su scala logaritmica accettano gli stessi argomenti di plot:


• semilogx genera un grafico con scala logaritmica sull’asse x
• semilogy genera un grafico con scala logaritmica sull’asse y
• loglog genera un grafico con scala logaritmica su entrambi gli
assi

Valori ≤ 0 non possono ovviamente essere visualizzati su una scala


logaritmica: in questo caso, MATLAB semplicemente ignorerà questi
punti, producendo un warning.
C o m a n d i g r a f i c i ( X V I I ) – E r r o r ba r

Le errorbar (barre di errore) vengono solitamente utilizzate per


presentare una stima dell’errore insieme a dati sperimentali o
computazionali (che possono essere rappresentati usando plot)

errorbar(x,y,l,u)

Limite inferiore Limite superiore


dell’errorbar dell’errorbar

x,y,l,u devono avere le


stesse dimensioni
Comandi grafici (XVIII) – Bar plot

La funzione per generare grafici a barre in MATLAB è:


• bar(y): genera un grafico a barre in cui i valori contenuti nel
vettore y sono rappresentati rispetto a valori crescenti di x.

yy=rand(5,1);
h=bar(yy)
grid on
box on
xlabel('x [-]');
ylabel('y [-]’);
ax=gca;
ax.FontSize=16;
Comandi grafici (XIX) – Bar plot

Un modo per indicare la categoria a cui appartiene ogni barra è


di specificare l’asse x come un array categorical, che però
riordina le voci in ordine alfabetico.

c=categorical({'E','A','C',
'D',’B’});
yy=rand(5,1);
h=bar(c,yy)
...
Comandi grafici (XX) – Bar plot

Per riordinare l’array categorical secondo un ordine user-defined


si può usare il comando reordercats

c=categorical({'E','A','C',
'D',’B’});
c=reordercats(c,{'E','D’,
'C','B',’A’});
yy=rand(5,1);
h=bar(c,yy)
...
Comandi grafici (XXI) – Bar plot

Per cambiare colore alle singole barre occorre impostare la


proprietà FaceColor dell’oggetto bar come ‘flat’, cosicché il
da poter popolare la proprietà CData con una tripletta RGB.
...
yy=rand(5,1);
h=bar(c,yy)
h.FaceColor='flat';
h.CData(2,:)=[1 0 0];
...

Esercizio 7
Comandi grafici (XXII) – Bar plot

Un grafico a barre che abbia come argomento una matrice mXn


può essere impilato utilizzando lo stile ‘stacked’. L’altezza di ogni
barra è la somma degli elementi lungo le righe.

...
yy=rand(4,3)
h=bar(yy,'stacked’)
...
Comandi grafici (XXIII) – Bar plot

In un grafico ‘stacked’, il colore di ogni ‘pila’ di ogni categoria


lungo l’asse x può essere modificato tramite la proprietà
FaceColor.

...
yy=rand(4,3)
h=bar(yy,'stacked’)
h(1).FaceColor=‘g’; % si
può anche usare una
tripletta RGB
...
Comandi grafici (XXIV) – Bar plot

In un grafico ‘stacked’ la legenda funziona come per i semplici


plot.

...
yy=rand(4,3)
h=bar(yy,'stacked’)
...
legend('Verde','Arancione’,
'Giallo','location’,
'bestoutside','orientation’,
'horizontal')