Indice

Gestione dei colori

Nei grafici di R, è possibile utilizzare singoli colori o vettori di colori indicati con varie notazioni (nomi, RGB, sistema esadecimale), come anche palette (combinazioni standard) di colori.

Nei grafici, il colore è indicato con il parametro col=.

I colori

È possibile indicare, come valore dell'argomento col, o laddove sia richiesto un colore:

Esempi

require(car)                                 #dati
data(SLID)
 
barplot(table(SLID$sex),
        horiz = F,
        names.arg = c("Donne", "Uomini"),
        col = "grey")
 
pie(
  table(SLID$language),
  main = "Lingue parlate",
  labels = c("Inglese", "Francese", "Altro"),
  col = c("lightblue", "orange", "darkgreen")
)

Come si è detto, i colori possono essere indicati con il nome ("orange"), con il valore esadecimale ("#FFA500"), o con il sistema RGB ("rgb(255,165,0)"). Per questi due ultimi sistemi, nel web si trovano svariate liste.

I nomi che R "capisce", possono essere elencati con la funzione colors():

head(colors(), 20)
##  [1] "white"         "aliceblue"     "antiquewhite"  "antiquewhite1"
##  [5] "antiquewhite2" "antiquewhite3" "antiquewhite4" "aquamarine"   
##  [9] "aquamarine1"   "aquamarine2"   "aquamarine3"   "aquamarine4"  
## [13] "azure"         "azure1"        "azure2"        "azure3"       
## [17] "azure4"        "beige"         "bisque"        "bisque1"

In questo caso, stampiamo i primi 20, ma sono 657, più "transparent".

Eseguendo il comando demo(colors), verranno caricate alcune funzioni utili a trovare e visualizzare i colori.

Ad esempio, per trovare colori simili ad uno il cui nome sia noto:

nearRcolor("red")
##        0.0000        0.0451        0.0667        0.0803        0.0830 
##         "red"   "orangered"        "red2"  "orangered2" "darkorange1" 
##        0.0915 
##  "darkorange"

Per avere un grafico dei colori:

scales::show_col(nearRcolor("cyan"), ncol=3)


Le palette

Per scegliere o definire i colori in uso è possibile anche utilizzare le palette, set di colori indicizzati (vettore di colori).

Per conoscere i colori che compongono la palette in uso (ad esempio quella di default) si usa il comando palette()

palette()
## [1] "black"   "#DF536B" "#61D04F" "#2297E6" "#28E2E5" "#CD0BBC" "#F5C710"
## [8] "gray62"
scales::show_col(palette(), ncol=4)


Le palette di colori disponibili nella distribuzione standard di R sono:

palette.pals()
##  [1] "R3"              "R4"              "ggplot2"         "Okabe-Ito"      
##  [5] "Accent"          "Dark 2"          "Paired"          "Pastel 1"       
##  [9] "Pastel 2"        "Set 1"           "Set 2"           "Set 3"          
## [13] "Tableau 10"      "Classic Tableau" "Polychrome 36"   "Alphabet"

Come usare la palette per indicare i colori

Conoscendo la palette e i colori in uso, è possibile indicare i colori con l'indice del colore nella palette in uso.

Esempio

barplot(
  table(SLID$language),
  horiz = T,
  main = "Lingue",
  names.arg = c("Inglese", "Francese", "Altro"),
  col = c(3:5)
)

In questo caso col = c(3:5) indica i colori dal terzo al quinto della paletta in uso.

Naturalmente, è sempre possibile indicare un solo colore (col = 4), o una serie di colori non contigui (col = c(3, 7, 2, 5)).

Selezionare una paletta di colori

Per selezionare una palette di colori si usa la funzione palette().

par(mar=c(2,4,2,0.1))
# scegliamo una paletta
palette("Pastel 2")
boxplot(data = MYSLID, 
        # formula
        Retribuzione ~ Genere,
        main = "Gender Gap", xlab = NULL,
        # ampiezza delle 'scatole'
        boxwex = 0.3,
        col = c(4,3))

# torniamo ai valori di default
palette("default") 

Alle palette viste, si aggiungono quelle incluse nel pacchetto colorspace (vedi la guida di colorspace))) :

e

A partire da queste, che hanno una diversa sintassi, possono essere costruite palette indicando anche il numero di colori desiderati:

palette(rainbow(20))

A questo punto i colori della paletta saranno:

palette()
 [1] "red"     "#FF4C00" "#FF9900" "#FFE500" "#CCFF00" "#80FF00" "#33FF00"
 [8] "#00FF19" "#00FF66" "#00FFB2" "cyan"    "#00B3FF" "#0066FF" "#0019FF"
[15] "#3300FF" "#8000FF" "#CC00FF" "#FF00E6" "#FF0099" "#FF004D"

L’intera gamma di colori sarà suddivisa nel numero di colori indicato, andando a comporre la palette che entrerà poi in uso.

Anche in questo caso, per tornare alla paletta di default useremo:

palette("default")

Per visualizzare velocemente i colori di queste palette, possiamo costruire dei grafici a barre ad hoc con 10 colori delle stesse:

n = 10
barplot(rep(1, n), col = rainbow(10))
barplot(rep(1, n), col = heat.colors(10))
barplot(rep(1, n), col = terrain.colors(10))
barplot(rep(1, n), col = topo.colors(10))
barplot(rep(1, n), col = cm.colors(10))

Definire una paletta di colori personalizzata

È anche possibile definire una paletta di colori personalizzata, semplice-mente indicando i nomi dei colori che si vogliono utilizzare, nell’ordine preferito:

palette(c("red","green","green4","blue","cyan"))

Una volta dato il comando, la paletta di colori sarà attiva, e potrà essere utilizzata come le altre:

palette()
[1] "red"    "green"  "green4" "blue"   "cyan" 

Altre risorse online

Script di esempio (download)

Gest colori.R
# file di dati
require(car)
data(SLID)
 
# indicare i colori con il nome
barplot(table(SLID$sex),
        horiz = F,
        names.arg = c("Donne", "Uomini"),
        col = "grey")
 
pie(
  table(SLID$language),
  main = "Lingue parlate",
  labels = c("Inglese", "Francese", "Altro"),
  col = c("lightblue", "orange", "darkgreen")
)
 
# elenco dei primi 20 colori in R
head(colors(), 20)
 
# funzioni per visualizzare i colori
demo(colors)
nearRcolor("red")
plotCol(nearRcolor("cyan"), nrow=3)
 
 
# indicare i colori con l'indice della palette
barplot(
  table(SLID$language),
  horiz = T,
  main = "Lingue",
  names.arg = c("Inglese", "Francese", "Altro"),
  col = c(3:5)
)
 
n = 4
barplot(rep(1, n), col = c(3, 7, 2, 5))
 
# conoscere i colori della palette
palette()
 
# impostare una palette diversa
palette("Pastel 2")
 
# impostare una palette del pacchetto colorspace
palette(rainbow(20))
 
# tornare alla palette di default
palette("default")
 
# visualizzare i colori delle palette
n = 10
barplot(rep(1, n), col = rainbow(10))
barplot(rep(1, n), col = heat.colors(10))
barplot(rep(1, n), col = terrain.colors(10))
barplot(rep(1, n), col = topo.colors(10))
barplot(rep(1, n), col = cm.colors(10))