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

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")

Grafico a barre

print (ggBar1)

Grafico a barre

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)

Secondo barplot

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)

Grafico a torta

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`.

Istogramma

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)

Density graph

# 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)

Density graph - per scolarità

# 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 corrette x scolarità

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)

Boxplot + Jitter

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)

Grafico a violino

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).

Scatterplot

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)

Jitter Plot

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

plot of chunk vis--sim_barplot1

plot of chunk vis--sim_barplot2

plot of chunk vis--sim_pie

plot of chunk vis--sim_donut

plot of chunk vis--sim_hist

plot of chunk vis--sim_density

plot of chunk vis--sim_scatter

plot of chunk vis--sim_boxplot

Cookies

Questo sito utilizza cookies tecnici e di terze parti quali google analytics per funzionalità tecniche e statistiche.

Se non acconsenti all'utilizzo dei cookie di terze parti, alcune di queste funzionalità potrebbero essere non disponibili.