%% Testo
% Inserire in un vettora riga (denominato X) la spesa in Euro di 20 clienti di un outlet forniti di seguito 20 --- 110 --- 31 --- 125 --- 40 --- 128--- 50 --- 140--- 65 --- 150 --- 72 --- 175 --- 85 --- 190--- 100 --- 205 --- 100 --- 230--- 105 ---310
% Calcolare e interpretare il minimo, il primo quartile la mediana il terzo quartile ed il massimo
% Calcolare ed interpretare la differenza interquartile (DI)
% Calcolare il punto di troncamento superiore del boxplot di prima approssimazione (x0.75+1.5 DI)
% Trovare il punto di troncamento superiore finale (valore più grande tra quelli più piccoli di x0.75+1.5 DI)
% Osservazione: l'obiettivo dei quesiti che seguono è quello di familiarizzare con le opzioni di una determinata funzione (in questo caso della funzione boxplot). Fare riferimento all'help della funzione per visualizzare le diverse opzioni.
% Rappresentare graficamente il boxplot della spesa utilizzando prima l'orientamento verticale e poi l'orientamento orizzontale (opzione 'Orientation')
% Rappresentare tutti i punti che si trovano fuori dalla scatola come outliers (opzione 'Whisker',0 )
% Inserire uno slider  per controllare in maniera dinamica l'ampiezza dei baffi (whisker del boxplot).
%
% Lo slider deve avere valore minimo 0 valore massimo 3 e passo 0.5
%%
%
%% Inserimento dei dati in un vettore riga

X=[20, 110,  31, 125,  40, 128,  50, 140,  65, 150,  72, 175,...
 85, 190,  100, 205,  100, 230,  105 310];

%
%% Compute required quantiles

quant=[0 0.25 0.50 0.75 1];

perc=quantile(X,quant);

DI=perc(4)-perc(2);

disp(['La differenza interquantile è uguale a ' num2str(DI)])
% Interpretazione di DI: il 50% dei valori centrali della distribuzione
% presenta una dispersione pari a 94 Euro

% Calcolo punto di troncamento superiore di prima approssimazione
% (PTsupini)
PTsupini=perc(4)+1.5*DI;
disp(['Il punto di troncamento superiore di prima approssimazione è uguale a ' num2str(PTsupini)])


% Calcolo del punto di troncamento superiore finale
% ossia del valore più grande tra quelli più piccoli di PTsupini
Xordinato=sort(X,'descend');
PTsupfin=Xordinato(find(Xordinato<PTsupini,1));

% Modo alternativo per trovare il punto di troncamento superiore finale.
% L'istruzione X<PTsupini produce un vettore Booleano della stessa
% dimensione di X che ha in posizione i un TRUE se l'iesimo elemento di X è
% più piccolo di PTsupini.
% L'istruzione X(X<PTsupini) estrae gli elementi di X che sono più piccoli
% di PTsupini
% L'istruzione max(X(X<PTsupini)) prende il valore più grande tra quelli
% più piccoli di PTsupini
PTsupfinCHK=max(X(X<PTsupini));
% Controllo che le due implementazioni producono lo stesso valore.
isequal(PTsupfin,PTsupfinCHK)

disp(['Il punto di troncamento superiore finale è uguale a ' num2str(PTsupfin)])

%
%% Draw boxplot with vertical and horizontal orientation

% boxplot with vertical orientation (default)
boxplot(X)
title('Boxplot con orientamento verticale')
% Boxplot with horizontal orientation
boxplot(X,'Orientation','horizontal')
title('Boxplot con orientamento orizzontale')

%% Draw just the boxplot and set all points outside the box as outliers.

% Boxplot with horizontal orientation
boxplot(X,'Whisker',0)
title('Show the box and all points ouside the box')

%% Inserire uno slider per controllare in maniera dinamica l'ampiezza dei baffi (whisker del boxplot)
%


boxplot(X,'Whisker',1)