La visualizzazione dei dati
I grafici
I grafici costituiscono una forma di rappresentazione visiva, su di un'area bidimensionale, di un insieme di informazioni.
Le dimensioni spaziali e visive vengono utilizzate per rappresentare dati quantitativi, ordinali o categoriali.
Vantaggi
Uno dei vantaggi della rappresentazione grafica è che sfrutta alcune caratteristiche del sistema visivo:
- la capacità di elaborare preattentivamente, in parallelo, un'ampia quantità di dati;
- la capacità di identificare pattern, distribuzioni, relazioni fra i dati;
- la capacità di percepire l'allineamento, orizzontale e verticale, degli elementi grafici;
- la capacità di stimare, anche se approssimativamente, differenze di lunghezza, di luminosità, di colore e di forma degli elementi
Più in generale, le rappresentazioni grafiche sfruttano alcuni dei princìpi della gestalt:
- prossimità
- continuità
- allineamento
- connessione
- chiusura
Un buon grafico:
- riesce a comunicare una appropriata quantità di informazioni in maniera corretta, non distorta e facile da comprendere;\
- permette di far emergere pattern, distribuzioni di variabili, relazioni fra variabili, presenza di outlier, relazioni fra osservazioni o fra statistiche, e di stimare, seppure approssimativamente, il valore delle singole osservazioni.
- è intuitivo, e massimizza il rapporto fra informazione e carico cognitivo;
- usa gli aspetti estetici per contribuire a rappresentare l'informazione
Gli elementi grafici
Un grafico è un oggetto grafico complesso. Gli oggetti grafici complessi sono composti da
- uno spazio grafico (bidimensionale)
- degli oggetti grafici (complessi o semplici)
- delle strutture di riferimento (titoli, legende, assi, etichette, annotazioni), che permettono l'interpretazione e facilitano la lettura dei dati
La definizione è ricorsiva: un oggetto grafico complesso può contenere altri oggetti grafici complessi.
Gli oggetti grafici
Gli oggetti grafici rappresentano:
- osservazioni
- statistiche
- relazioni (fra osservazioni o fra statistiche)
Gli oggetti grafici semplici sono formati da figure geometriche: punti (0d), linee o curve (1d), rettangoli o aree (2d), da icone e da elementi testuali
Rappresentare le relazioni
Le relazioni (fra osservazioni o statistiche) sono rappresentate attraverso differenti modalità:
- clustering spaziale
- inclusione in un contenitore (categoriale)
- utilizzo di separatori (categoriale)
- allineamento (relazione ordinale)
- collegamento: generalmente le osservazioni sono punti (nodi), i collegamenti linee o curve (archi); possono essere rappresentati varie tipologie di grafi: catene, loop, grafi complessi, alberi
Codifica delle variabili
Gli oggetti grafici codificano l'informazione in base ad alcune dimensioni. Le principali sono
- la posizione sugli assi x ed y
- la forma
- il colore
- la luminosità
- la dimensione
Altre possibili dimensioni sono il tipo e lo spessore dei bordi o delle linee, il pattern in caso di aree.
Dimensioni e tipologia di dati
Le coordinate x e y sono adatte a rappresentare variabili continue, ordinali e categoriali.
La forma (dei punti), il tipo di linea, alcuni pattern di riempimento delle aree, e alcune palette di colore sono adatti a rappresentare un numero limitato di categorie.
Alcune palette di colore, la luminosità degli oggetti e la densità dei pattern sono adatti a rappresentare le variabili ordinali, mentre sono meno adatti a rappresentare le variabili ad intervalli, in quanto la capacità del nostro sistema visivo di stimare gli intervalli è meno precisa.
Percezione e stima dei valori
Il sistema visivo riesce a stimare abbastanza bene la dimensione degli oggetti (rappresentazione grafica dei punti, la lunghezza delle linee, la dimensione delle aree) se si sviluppa in una sola dimensione, mentre ha difficoltà a stimare la dimensione in base all'area.
Anche la stima angolare è più approssimativa (e dunque è più difficile stimare le proporzioni nei grafici con assi radiali: grafici a torta o a ciambella)
Rappresentazione multivariata
È potenzialmente possibile rappresentare, in un grafico, fino a 5 variabili di ogni osservazione, attraverso le coordinate x e y (a intervalli, ordinali o categoriali), la forma (categorie), il colore (ordinale o categoriale) e la dimensione (ordinale o a rapporti).
In pratica, però, si rischia l'overload cognitivo.
È pertanto opportuno limitarsi a rappresentare fino a 3, al massimo 4 variabili.
Fundamentals of Data Visualization
ggplot2
ggplot2 è un pacchetto per creare grafici in R. ggplot2 è molto popolare, in quanto
- crea grafici esteticamente piacevoli
- è molto potente
- utilizza in maniera esplicita l'approccio di Grammar of Graphics
La logica
Con ggplot2 la creazione di un grafico avviene attraverso una serie di passi, che possono essere concatenati:
- creare l'oggetto ggplot ed associare il set di dati (generalmente un data.frame) da rappresentare
- calcolare le eventuali statistiche
- identificare la variabile (analisi univariata) o le variabili (rappresentazione bi- o multivariata) da mappare sugli assi x e y o sulle dimensioni grafiche del colore, della dimensione, della forma
- decidere la geometria, ovvero il tipo di elementi visuali (punti, linee, aree o oggetti complessi) in base alla tipologia di dati e delle eventuali statistiche da rappresentare
- definire le scale e le eventuali trasformazioni
- creare uno o più livelli grafici (layer) dove collocare
- gli elementi grafici (semplici e complessi)
- le strutture di supporto alla lettura ed interpretazione (titoli, assi, scale, griglie)
La sovraimposizione di livelli diversi permette di rappresentare, sullo stesso spazio bidimensionale, osservazioni, statistiche e strutture di supporto
La sintassi
La creazione di un grafico ggplot2 utilizza una sintassi che può essere sintetizzata nel seguente template (cita fonte)
grafico <- ggplot(data = <DATA>) +
<GEOM_FUNCTION>(
mapping = aes(<MAPPINGS>),
stat = <STAT>,
position = <POSITION>
) +
<COORDINATE_FUNCTION> +
<FACET_FUNCTION>
print (grafico)
Risorse
- Fundamentals of Data Visualization
- The Grammar of Graphics
- A Comprehensive Guide to the Grammar of Graphics for Effective Visualization of Multi-dimensional…
- The Art of Effective Visualization of Multi-dimensional Data
- Grammar of Graphics in R
- 3 Data visualisation | R for Data Science
- Quick-R: ggplot2 Graphs
- Data visualization with ggplot2
- Before Tufte, there was Bertin – Karl Sluis – Medium
- Beyond Tufte – Karl Sluis – Medium
- Top 50 ggplot2 Visualizations - The Master List (With Full R Code)
Esempi
Per mostrare ggplot2 in azione, carichiamo il dataframe parole_nonparole_pulito.rds
e carichiamo la libreria ggplot2
(eventualmente la installiamo se non presente nel nostro sistema).
# install.packages("ggplot2")
library(ggplot2)
# partecipanti <- readRDS("https://s3.eu-central-1.amazonaws.com/bussolon/dati/parole_nonparole_pulito.rds")
partecipanti <- readRDS("../../dati/parole_nonparole_pulito.rds")
## Warning in gzfile(file, "rb"): non è possibile aprire il file '../../dati/parole_nonparole_pulito.rds', motivo 'File
## o directory non esistente'
## Error in gzfile(file, "rb"): non è possibile aprire la connessione
Barplot
Creaiamo un grafico a barre con la distribuzione della scolarità. Mappiamo anche la dimensione del genere.
ggBar1 <- ggplot(partecipanti, aes(scol))
ggBar1 + geom_bar(aes(fill=sex), width = 0.5) +
theme(axis.text.x = element_text(angle=65, vjust=0.6)) +
labs(title="Scolarità",
subtitle="Scolarità, per sesso",
caption="Parole non parole - barplot")
print (ggBar1)
Un secondo esempio di barplot per visualizzare la distribuzione del sesso.
ggBar2 <- ggplot(partecipanti, aes(x="", fill=sex)) +
geom_bar(width = 0.5) +
#theme(axis.text.x = element_text(angle=65, vjust=0.6)) +
labs(title="Genere",
#subtitle="Genere",
x= "",
y= "Frequenza",
caption="Parole non parole - barplot 2")
plot(ggBar2)
Grafico a torta
In ggplot2 un grafico a torta è un grafico a barre con coordinate polari.
ggPie <- ggBar2 +
coord_polar("y", start=0)
plot(ggPie)
Istogramma
L'istogramma della distribuzione delle risposte corrette
ggHist <- ggplot(data=partecipanti, aes(corrette)) +
geom_histogram() +
labs(title="Corrette",
x="Risposte corrette",
y="",
subtitle="Numero di risposte corrette",
caption="Parole non parole - barplot")
plot(ggHist)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Histograms and frequency polygons --- geom_freqpoly • ggplot2
Density plot
ggDensity <- ggplot(data=partecipanti, aes(corrette)) +
geom_density() +
labs(title="Corrette",
x="Risposte corrette",
y="",
subtitle="Numero di risposte corrette",
caption="Parole non parole - Density")
plot(ggDensity)
# geom_density(aes(fill=factor(cyl)), alpha=0.8) +
Creiamo un nuovo density plot. In questo caso, però, definiamo il colore dell'area (fill) in base alla scolarità. In questo modo otterremo 6 aree sovrapposte.
Va notato che l'altezza delle aree è normalizzata, e non proporzionale alla frequenza delle varie categorie.
ggDensity2 <- ggplot(data=partecipanti, aes(corrette)) +
geom_density(aes(fill=factor(scol)), alpha=0.5) +
labs(title="Corrette",
x="Risposte corrette",
y="",
subtitle="Numero di risposte corrette",
caption="Parole non parole - Density")
plot(ggDensity2)
# geom_density(aes(fill=factor(cyl)), alpha=0.8) +
Boxplot
Il boxplot della distribuzione delle risposte corrette, distinte per scolarità
ggBoxplot <- ggplot(data=partecipanti, aes(scol,corrette)) +
geom_boxplot(varwidth=T) + # , fill="plum"
labs(title="Corrette x scolarità",
x="Scolarità",
y="Risposte corrette",
subtitle="Numero di risposte corrette, per scolarità",
caption="Parole non parole - Boxplot")
plot(ggBoxplot)
Boxplot + jitter
In questo grafico al boxplot sono sovrapposti (in un layer superiore) i punti corrispondenti alle osservazioni.
Viene usata la geometria jitter
, che inserendo del rumore nei dati permette la visualizzazione dei punti altrimenti sovrapposti.
In questo grafico vediamo all'opera la logica dei layer sovrapposti.
ggBoxplot2 <- ggplot(data=partecipanti, aes(scol,corrette)) +
geom_boxplot(varwidth=T) + # , fill="plum"
geom_jitter(width = .2, size=1, color="lightslateblue") +
labs(title="Corrette x scolarità",
x="Scolarità",
y="Risposte corrette",
subtitle="Numero di risposte corrette, per scolarità",
caption="Parole non parole - Boxplot")
plot(ggBoxplot2)
Violin plot
ggViolin <- ggplot(data=partecipanti, aes(scol,corrette)) +
geom_violin() + # , fill="plum"
labs(title="Corrette x scolarità",
x="Scolarità",
y="Risposte corrette",
subtitle="Numero di risposte corrette, per scolarità",
caption="Parole non parole - Boxplot")
plot(ggViolin)
Scatterplot
ggScatter <- ggplot(partecipanti, aes(x=risposte, y=corrette)) +
geom_point(aes(col=sex, size=as.numeric(scol))) + # , size=scol
labs(
title="Scatterplot",
subtitle="Risposte Vs Corrette",
y="Corrette",
x="Risposte date",
caption = "Exp. parole non parole")
plot(ggScatter)
## Warning: Removed 38 rows containing missing values (geom_point).
In questo grafico abbiamo mappato 3 dimensioni; in genere è necessario evitare il rischio è di sovraccaricare il grafico.
ggJitter <- ggplot(partecipanti, aes(x=risposte, y=corrette)) +
# geom_point(aes(col=sex, size=as.numeric(scol))) + # , size=scol
geom_jitter(aes(col=sex),width = .2, size=1) +
labs(
title="Jitterplot",
subtitle="Risposte Vs Corrette",
y="Corrette",
x="Risposte date",
caption = "")
plot(ggJitter)
Esercizi
Caricare il data frame df_simulato
df_simulato <- read.csv(
"https://s3.eu-central-1.amazonaws.com/bussolon/dati/df_simulato.csv")
Riprodurre i seguenti grafici