%% PARTE A. Rappresentazioni alternative di una serie storica univariata
% Il foglio "dati" del file grafuniv.xlsx contiene la serie storica mensile delle vendite di un bene in un determinato anno.
% Rappresentare l’andamento delle vendite tramite
% Barre verticali
% Barre orizzontali
% Linee
% Area
% Inserire i quattro grafici di cui sopra in una stessa finestra grafica con 4 pannelli.
% Inserire in una nuova finestra grafica il funnelplot o grafico ad imbuto  (necessario FSDA toolbox)
% Inserire in una nuova finestra grafica il balloonplot (necessario FSDA toolbox).
%
%
%% PARTE B: Rappresentazioni alternative di una serie storica bivariata.
% Il foglio dati del file contiene due serie storiche mensili delle vendite di sci e sci d'acqua in un determinato anno.
% Rappresentare l’andamento delle vendite tramite
% Barre verticali (denominazine Excel: colonne raggruppate)
% Barre orizzontali (denominazione Excel: barre raggruppate)
% Colonne in pila
% Colonne in pila al 100%
% Area in pila al 100%
% Inserire i 5 grafici precedenti in 5 pannelli della finestra grafica
% Costruire il balloonplot.
%
%% PARTE C: il grafico waterfall (a cascata).
%
% Il foglio "Figura20" del file waterfall.xlsx contiene le diverse voci di bilancio che consentono di passare dai ricavi lordi al Reddito netto passando per "I ricavi netti", "Il reddito lordo" ed il "Reddito operativo".
% Costuire il grafico waterfall per comprendere i passaggi intermedi dai Ricavi Lordi al Reddito netto.
%% PARTE A soluzione
% Importazione dei dati dentro MATLAB

% L'opzione ReadRowNames serve per definire la prima colonna con i nomi
% delle righe
X = readtable("grafuniv.xlsx",'ReadRowNames',true); % X è una table
Xdouble=X{:,1}; % Xdouble è un array che contiene solo i numeri 
rownam=X.Properties.RowNames;

%
% Creazione dei grafici

% L'opzione subplot serve creare panelli multipli nella finestra grafica
% subplot(3,2,...) suddivide la finestra grafica in 3 righe e 2 colonne
% (ossia permette di accogliere 6 grafici)
% subplot(2,2,1) suddivide la finestra grafica in 4 pannelli e stabilisce che il prossimo grafico deve
% essere inserito nel pannello in alto a sinistra
subplot(2,2,1)
% La funzione bar crea il grafico a barre
bar(Xdouble)
% la funzione MATLAB gca (get current axes) consente di avere un handle alle diverse proprietà del grafico
% Ad esempio la funzione
% get(gca,'xticklabel') consente di recuperare le etichette delle barre
% sull'asse delle ascisse
% L'istruzione che segue specifica che le etichette delle barre devono
% essere i nomi delle righe della table X
set(gca,'xticklabel',rownam)
title('Grafico a barre verticali')

% un modo alternativo per inserire i nomi delle righe come intestazione
% delle barre è quello di attribuire la proprietà categorical al vettore
% che contiene i nomi delle righe della table
% bar(categorical(rownam,rownam),Xdouble)

% subplot(2,2,2) inserisce il secondo grafico nel pannello in alto a destra
subplot(2,2,2)
% La funzione barh crea il grafico a barre orizzontale
barh(Xdouble)
% Nel grafico a barre orizzontale andiamo a inserire i nomi della table
% nelle etichette dell'asse y
set(gca,'yticklabel',rownam)
title('Grafico a barre orizzontali')

% subplot(2,2,3) inserisce il terzo grafico nel pannello in basso a sinistra
subplot(2,2,3)
% La funzione plot crea il grafico a linee
plot(Xdouble)
% Vado ad inserire i nomi della table
% nelle etichette dell'asse y
% La prprietà 'xtick',1:12 consente di specificare che ci devono essere 12
% etichette. La proprietà 'xticklabel' consente di specificare quali devono
% essere queste 12 etichette. In questo caso le 12 etichette corrispondono
% alle righe della table originaria
set(gca,'xtick',1:12,'xticklabel',rownam,'XTickLabelRotation',60)
title('Grafico a linee')

% subplot(2,2,4) inserisce il quarto grafico nel pannello in basso a destra
subplot(2,2,4)
% La funzione area crea il grafico ad area
area(Xdouble)
set(gca,'xtick',1:12,'xticklabel',rownam,'XTickLabelRotation',60)
title('Grafico ad area')
%% Costruzione grafico ad imbuto
% La funzione funnelchart di FSDA toolbox crea il grafico ad imbuto
figure
funnelchart(Xdouble,'Labels',rownam);
title('Grafico ad imbuto')

%% Costruzione balloonplot
% La funzione balloonplot di FSDA toolbox crea il grafico "balloon". L'area
% di ogni cerchio è proporzionale al rispettivo numero sottostante. I
% cerchi presentano una gradazione di colore che è visibile in una barra di
% colore a fianco del grafico.
figure
% Il balllonplot accetta come input anche un oggetto di tipo table di
% conseguenza non c'è bisogno di trasformare l'input X in array
balloonplot(X);
title('Balloon plot')

%
%% PARTE B soluzione


% L'opzione ReadRowNames serve per definire la prima colonna con i nomi
% delle righe
X = readtable("graf_univ_2serie.xlsx",'Sheet','dati','ReadRowNames',true);
Xarray=X{:,1:2};
NomiRighe=X.Properties.RowNames;
% L'istruzione
% B = categorical(A,valueset)
% crea una categoria (modalità) per ogni calore dentro valueset
% Questo per forzare Matlab ad utilizzare l'ordine presente dentro
% X.Properties.RowNames
mesi=categorical(NomiRighe,NomiRighe);
% Provate a vedere cosa succede se l'istruzione categorical si elimina
% e si utilizza semplicemente l'istruzione
% mesi=categorical(NomiRighe)

subplot(3,2,1)
% La funzione bar crea il grafico a barre verticali
bar(mesi,Xarray)
title('Grafico a barre verticali')

subplot(3,2,2)
% La funzione barh crea il grafico a barre orizzontali
barh(mesi, Xarray)
title('Grafico a barre orizzontali')

subplot(3,2,3)
% colonne in pila
bar(mesi,Xarray,'stacked')
title('Colonne in pila')


subplot(3,2,4)
% colonne in pila al 100%
% Ogni valore di ogni riga viene diviso per il totale di riga
bar(mesi,100*Xarray./sum(Xarray,2),'stacked')
title('Colonne in pila al 100%')


subplot(3,2,5)
% area in pila al 100%
area(mesi,100*Xarray./sum(Xarray,2))
title('Area in pila al 100%')


%

%% Creazione balloonplot
figure
balloonplot(X);

%% PARTE C soluzione
% Caricamento dati


X = readtable("Waterfall.xlsx",'Sheet','Figura29','ReadRowNames',true,'Range','A1:B14');
figure
waterfallchart(X,'SetAsTotal',[1 3 7 11 13]);
% Se si vuole personalizzare il formato dei numeri sull'asse y
ax=gca;
ax.YRuler.Exponent=0;
ax.YRuler.TickLabelFormat = '%12.0f';
title('Dal ricavo lordo al reddito netto')