Ricerca Sociale con R

Una wiki per l'analisi dei dati con R

Strumenti Utente

Strumenti Sito


Il Laboratorio di Analisi dei Dati con R, dell'Università di Teramo su piattaforma Meet, inizia il 9 aprile 2021 - Iscrizione - email
r:ggplot2:gestione_colori

La gestione dei colori in ggplot

Abbiamo visto che in ggplot2 è possibile:

  • indicare direttamente i colori (geom_point(col = "red") o geom_barplot(fill = "red")); oppure
  • mappare una variabile (geom_point(aes(col = x))o geom_barplot(aes(fill = x)));

vedi ggplot

Quando una variabile viene mappata per la selezione dei colori, viene prodotta anche una legenda.

Inoltre, a seconda del tipo di carattere rappresentato, vengono usate scale di colori diverse, ad esempio:

Le funzioni per le scale

Tali scale possono essere modificate con una serie di funzioni che:

  • iniziano con scale_;
  • sono seguite da color_ (o colour_, è uguale) se l'argomento da utilizzare è col = ; da fill_ se l'argomento da utilizzare è fill = .

Ovvero:

  • aes(col = x) + scale_color_...()
  • aes(fill = x) + scale_fill_...()
Tab. 1: Funzioni per i colori in ggplot
funzione (scale\_color\_/scale\_fill\_) carattere
gradient, gradient2, gradientn continuo
hue discreto
grey discreto
brewer(palette = ) discreto
distiller(palette = ) continuo
manual *per inserire i valori a mano*
identity *per usare una variabile*

Per i caratteri continui, vengono utilizzate/create palette sequenziali (a gradiente), e divergenti (colori opposti e brillanti agli estremi, che sfumano al centro); per i caratteri discreti vengono invece utilizzate/create palette qualititative, con colori diversi fra di loro, ma di pari intensità/luminosità.

Queste funzioni consentono anche di attribuire un nome arbitrario alla legenda, o di eliminarla:

  • scale_color_gradient2(“cavalli”, …“) = la legenda avrà come titolo “cavalli” (figura 2)
  • scale_color_gradient2(guide = FALSE) = la legenda verrà eliminata dal grafico (figura 3)
# Pacchetti
library(tidyverse)
library(carData)

Variabili continue

La funzione è scale_color_gradient() / scale_fill_gradient(). Crea una paletta sequenziale (a gradiente), e richiede indicare i colori per i valori low e high della variabile mappata:

# gradient
mtcars %>% 
  ggplot(aes(wt, mpg)) +
  geom_point(aes(col = hp), size = 2) +
  scale_color_gradient(low = "lightgrey", high = "purple") +
  theme_minimal()
&nolink |

Fig. 1: Gradient: paletta sequenziale

La funzione scale_color_gradient2() / scale_fill_gradient2() crea invece una paletta divergente, e richiede indicare i colori per i valori low, high e anche mid della variabile mappata. Di default il valore per mid è 0; nell'esempio che segue ho indicato la media, e ho tradotto il nome delle variabili, anche cambiando il titolo della legenda:

# gradient 2
mtcars %>% 
  ggplot(aes(wt, mpg)) +
  geom_point(aes(col = hp), size = 2) +
  labs(x = "peso", y = "miglia") +
  scale_color_gradient2('cavalli',      # titolo della legenda
                         low = 'darkgreen', mid = 'yellow', high = 'red',
                         midpoint = mean(mtcars$hp))
&nolink |

Fig. 2: Gradient2: paletta divergente

Variabili discrete

La funzione scale_color_hue() non è molto semplice da usare, in quanto fa riferimento alla ruota dei colori (https://en.wikipedia.org/wiki/Color_wheel). Con l'argomento h.start, si indica il punto di inizio (in gradi). È inoltre possibile specificare come dividere i colori, la luminosità, la saturazione ecc.

# hue
SLID %>% 
  ggplot(aes(education, wages)) +
  geom_point(aes(col = sex)) +
  scale_color_hue(h.start = 90)       # cambio il punto sulla color wheel  
&nolink |

Color Brewer

Per le variabili discrete, è molto più semplice utilizzare scale_color_brewer() e scale_fill_brewer(), che richiedono di indicare una paletta di colori fra quelle elencante nelle pagine di aiuto, o sul sito http://colorbrewer2.org/:

# brewer
SLID %>% 
  ggplot(aes(education, wages)) +
  geom_point(aes(col = sex)) +
  scale_color_brewer(palette = "Set1")
&nolink |
Orange %>% 
  ggplot(aes(Tree, circumference)) +
  geom_boxplot(aes(fill = Tree)) +
  scale_fill_brewer(palette = "PuBuGn")
&nolink |

scale_color_distiller() e scale_fill_distiller() funzionano allo stesso modo, ma per le variabili continue:

# distiller
Orange %>% 
  mutate("scarti" = circumference - mean(circumference)) %>% 
  ggplot(aes(x = Tree, y = scarti)) +
  geom_col(width = 0.7, aes(fill = scarti)) +
  ylab("circumference (scarti)") +
  theme_minimal() +
  coord_flip() +
  scale_fill_distiller(palette = "Greens",
                       guide = FALSE)       # senza legenda
&nolink |

Fig. 3: Senza legenda

Vedi anche grafici a barre, figura 6

Toni di grigio

Per i caratteri discreti è possibile usare:

  • scale_color_grey() / scale_fill_grey()
  • scale_color_brewer(palette = "Greys"), o scale_fill_brewer()

Per i caratteri continui.

  • scale_color_distiller(palette = "Greys"), o scale_fill_distiller()

Manual

# manual
SLID %>% 
  ggplot(aes(sex)) +
  geom_bar(aes(fill = sex), width = 0.5) +
  scale_fill_manual(values=c("magenta", "blue"),
                    guide=FALSE)               
&nolink |

In questo modo, possiamo utilizzare anche le altre palette di R, oltre a quelle ColorBrewer (vedi Le palette).

palette(cm.colors(3))
SLID %>% 
  na.omit(language) %>% 
  ggplot(aes(language)) +
  geom_bar(aes(fill = language), width = 0.5) +
  scale_fill_manual(values=palette(),
                    guide=FALSE)
 
palette("default")
&nolink |

Identity

Se la variabile mappata (o una diversa) è codificata in modo compatibile con la notazione dei colori (numeri o nomi dei colori), è possibile utilizzare scale_color_identity() o scale_fill_identity().

La legenda va aggiunta, perché di default non viene prodotta.

# identity
ChickWeight %>% 
  ggplot(aes(Time, weight)) +
  geom_point(aes(col = Diet)) +
  scale_color_identity(guide = "legend")      # aggiungo la legenda
&nolink |

Anche in questo caso, possiamo cambiare la paletta:

palette(rainbow(4))
ChickWeight %>% 
  ggplot(aes(Time, weight)) +
  geom_point(aes(col = Diet)) +
  scale_color_identity(guide = "legend")
 
# torno alla paletta di default
palette("default")
&nolink |
r/ggplot2/gestione_colori.txt · Ultima modifica: 25/09/2021 13:35 da admin