Oggi affrontiamo assieme la componente scales
di ggplot2, vedendo parte delle sue (infinite) funzionalità con alcuni esempi veloci.
La prima domanda è “ma cosa fa scales?”, seguita da “quando dovrei usarlo?”. Replichiamo subito alla prima domanda, lasciando alla seconda questo post intero come risposta: scales definisce come deve avvenire il mapping dentro aes()
. Ne consegue che ogni mapping ha la sua scales associata di default, e che noi possiamo andarla a modificare aggiungendo la componente alla funzione di ggplot.
Comando
Il comando di scales è scale_<aesthetic>_<type>()
.
Ci sono due parti che possono cambiare ogni volta: aesthetic si riferisce alla componente da modificare (colore, asse x, asse y, …), type può essere sia generico (continuous, discrete, binned) oppure specifico (area, …).
Modificare estetica assi
La prima applicazione che mi viene in mente pensando a scales è quella relativa alla modifica dell’estetica degli assi; infatti, si possono modificare gli assi in moltissimi modi.
Vediamo subito un esempio di come si possono modificare alcuni parametri.
ggplot(mpg) +
geom_point(aes(x = displ, y = hwy)) +
scale_y_continuous(trans = "log10") +
scale_x_continuous(name = "engine displacement (l)", breaks = c(2.5, 4, 5.5))
Come si può vedere, ho aggiunto due comandi, uno per ogni asse, inserendo gli input di interesse in maniera molto intuitiva. Ci sarebbero molte altre opzioni per ogni asse, vi invito a guardarle da voi e sbizzarrirvi.
Modificare la scala delle dimensioni dei punti in uno scatter plot
Vi porto questo esempio in quanto molto autoesplicativo e utile.Normalmente, volendo usare una variabile numerica discreta per settare le dimensioni dei punti, il grafico che si ottiene è il segente:
Il problema è che non c’è corrispondenza diretta nelle dimensioni dei punti, quanto più delle dimensioni dei raggi dei punti, il che produce una percezione distorta nella nostra mente, dal momento che non siamo in grado di percepire una correspindenza lineare tra i raggi quanto più per le aree. In questo caso, dal momento che all’aumentare del raggio l’area aumenta in maniera esponenziale, si rischia di overstimare la differenza.
Per questo motivo, si può modificare il codice aggiungendo scale_size_binned(breaks = c(4, 5, 6, 8))
: size si riferisce all’estetica da modificare e breaks indica quali sono i valori da segnare sulla legenda. Questo è il risultato:
Ora i punti hanno una differenza più coerente con la percezione che abbiamo noi.
Modificare i colori di un grafico
Veniamo ora ad un’altra macro-area di modifica del mapping, ovvero la componente colore, vedendo qualche esempio di applicazione.
Come prima cosa, bisogna decidere la palette da usare. Online se ne trovano molte, ma per avere un riscontro immediato si può usare il comando RColorBrewer::display.brewer.all()
, grazie al quale possiamo vederle nella sezione Viewer.
Io ho scelto di usare Pastel1.
A questo punto, dopo aver inserito nel posto corretto il comando per settare il colore in base alla classe (rimando al post Introduzione a GGPLOT2), aggiungo quello per cambiare la palette scale_colour_brewer(palette = "Pastel1", name = "CLASS")
.
Per fare ciò, basta usare il comando guides(color = "legend")
, e si ottiene:
Di default, la palette dei colori è una palette di tipo continuo, in cui si usa il gradiente di un solo colore. Questo aspetto è modificabile allo stesso modo visto precedentemente.
N.B.: le legende vengono unificate in una sola solo se combaciano perfettamente in termini di nomi e numerosità.