Per una migliore visione, attiva JavaScript

Scales su GGPLOT2

 ·  🕘 4 min lettura  ·  🤖 Matteo Miotto

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.

Esempio 1 (Modificare estetica assi) Creare uno scatter plot displ*hwy (dataset mpg), in cui l’asse y è espresso in scala logaritmica, l’asse x è chiamato “engine displacement (l)” e ha come tacche i numeri 2.5, 4 e 5.5.
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))
Grafico in cui sono state modificate le estetiche degli assi

Figura 1: Grafico in cui sono state modificate le estetiche degli assi

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:
Scatter plot base con le dimensioni dei punti basate da una variabile numerica discreta

Figura 2: Scatter plot base con le dimensioni dei punti basate da una variabile numerica discreta

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:

Scatter plot in cui le dimensioni dei punti sono state modificate con *scale*

Figura 3: Scatter plot in cui le dimensioni dei punti sono state modificate con scale

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.

Esempio 2 (Cambiare palette colori) Modificare il grafico nell’immagine 3 in modo tale da avere colori diversi in base alla classe di auto, cambiare la palette dei colori con una a piacere e settare il nome della legenda relativa uguale a CLASS.


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

Palette *Pastel1*

Figura 4: Palette Pastel1

Esempio 3 (Combinare dimensione e colore con la stessa variabile) Modificare il grafico nell’immagine 3 in modo tale da avere colori e forme diversi in base ai consumi cittadini (cty) e avere una sola legenda.

Per fare ciò, basta usare il comando guides(color = "legend"), e si ottiene:

Legenda unificata

Figura 5: Legenda unificata

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

Condividi
Supporta l'autore con

Matteo Miotto
SCRITTO DA
Matteo Miotto
Genomic Data Science master student