-
Notifications
You must be signed in to change notification settings - Fork 41
/
Copy pathcouleurs.Rmd
179 lines (122 loc) · 7.93 KB
/
couleurs.Rmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
---
title: "Couleurs et Palettes"
---
```{r options_communes, include=FALSE, cache=FALSE}
source("options_communes.R")
```
<div class="guide-R">
Une version actualisée de ce chapitre est disponible sur **guide-R** : [Couleurs & Palettes](https://larmarange.github.io/guide-R/manipulation/couleurs.html)
</div>
<div class="webin-R">
Ce chapitre est évoqué dans le webin-R #08 (ggplot2 et la grammaires des graphiques) sur [YouTube](https://youtu.be/msnwENny_cg).
Ce chapitre est évoqué dans le webin-R #13 (exemples de graphiques avancés) sur [YouTube](https://youtu.be/5sD4Z8bTlMM).
</div>
## Noms de couleur
Lorsque l'on doit indiquer à **R** une <dfn>couleur</dfn>, notamment dans les fonctions graphiques, on peut mentionner certaines couleurs en toutes lettres (en anglais) comme `"red"` ou `"blue"`. La liste des couleurs reconnues par **R** est disponible sur <http://www.stat.columbia.edu/~tzheng/files/Rcolor.pdf>.
## Couleurs RVB
En informatique, les couleurs sont usuellement codées en Rouge/Vert/Bleu (voir <https://fr.wikipedia.org/wiki/Rouge_vert_bleu>) et représentées par un code hexadécimal à 6 caractères, précédés du symbole `#`. Ce code est reconnu par **R** et on pourra par exemple indiquer `"#FF0000"` pour la couleur rouge. Le code hexadécimal des différentes couleurs peut s'obtenir aisément sur internet, de nombreux sites étant consacrés aux palettes de couleurs.
Parfois, au lieu du code hexadécimal, les couleurs RVB sont indiquées avec trois chiffres entiers compris entre 0 et 255. La conversion en hexadécimal se fait avec la fonction `rgb`{data-pkg="grDevices"}.
```{r}
rgb(255, 0, 0, maxColorValue = 255)
```
## Palettes de couleurs
### Palettes natives
**R** fournit nativement quelques palettes de couleurs continues telles que `rainbow`{data-pkg="grDevices" data-rdoc="Palettes"}, `heat.colors`{data-pkg="grDevices" data-rdoc="Palettes"}, `terrain.colors`{data-pkg="grDevices" data-rdoc="Palettes"}, `topo.colors`{data-pkg="grDevices" data-rdoc="Palettes"} ou encore `cm.colors`{data-pkg="grDevices" data-rdoc="Palettes"}.
Voici un aperçu de ces palettes de couleurs :
```{r echo=FALSE}
demo.pal <-
function(n, border = if (n < 32) "light gray" else NA,
main = paste("color palettes; n=", n),
ch.col = c("rainbow(n, start=.7, end=.1)", "heat.colors(n)",
"terrain.colors(n)", "topo.colors(n)",
"cm.colors(n)"))
{
nt <- length(ch.col)
i <- 1:n; j <- n / nt; d <- j/6; dy <- 2*d
plot(i, i+d, type = "n", yaxt = "n", ylab = "", main = main)
for (k in 1:nt) {
rect(i-.5, (k-1)*j+ dy, i+.4, k*j,
col = eval(parse(text = ch.col[k])), border = border)
text(2*j, k * j + dy/4, ch.col[k])
}
}
demo.pal(16)
```
### Color Brewer
Le projet **Color Brewer** a développé des palettes cartographiques, à la fois séquentielles, divergentes et catégorielles, présentées en détail sur <http://colorbrewer2.org/>. Pour chaque type de palette, et en fonction du nombre de classes, est indiqué sur ce site si la palette est adaptée aux personnes souffrant de daltonisme, si elle est rendra correctement sur écran, en cas d'impression couleur et en cas d'impression en noir et blanc.
Voici un aperçu des différentes palettes disponibles :
```{r echo=FALSE, fig.height=8, fig.width=8}
library(RColorBrewer)
display.brewer.all(8)
```
L'extension `RColorBrewer`{.pkg} permets d'accéder à ces palettes sous **R**.
Si on utilise `ggplot2`{.pkg}, les palettes Color Brewer sont directement disponibles via les fonctions `scale_fill_brewer`{data-pkg="ggplot2" data-rdoc="scale_colour_brewer"} et `scale_colour_brewer`{data-pkg="ggplot2"}.
ATTENTION : les palettes Color Brewer sont seulement implémentées pour des variables catégorielles. Il est cependant possible de les utiliser avec des variables continues en les combinants avec `scale_fill_gradientn`{data-pkg="ggplot2" data-rdoc="scale_colour_gradient"} ou `scale_coulour_gradientn`{data-pkg="ggplot2" data-rdoc="scale_colour_gradient"} (en remplaçant `"Set1"` par le nom de la palette désirée) :
```{r eval=FALSE}
scale_fill_gradientn(values = RColorBrewer::brewer.pal(6, "Set1"))
```
### Viridis
Les palettes de couleurs de la famille **Viridis** ont initialement été créées pour **Matplolib** de telles manières que :
- les couleurs sont perçues de manière uniformes, même lorsqu’elles sont imprimées en noir et blanc ;
- les couleurs sont distinguées par les formes les plus courantes de daltonisme.
Voici un aperçu des différentes palettes de cette famille :
![](images/viridis-scales.png)
Ces palettes sont accessibles de manière générale via l'extension `viridis`{.pkg}.
Elles sont également implémentées dans `gpplot2`{.pkg} via les fonctions `scale_fill_viridis_c`{data-pkg="ggplot2" data-rdoc="scale_colour_viridis_d"} et `scale_colour_viridis_c`{data-pkg="ggplot2" data-rdoc="scale_colour_viridis_d"} pour des variables continues et `scale_fill_viridis_d`{data-pkg="ggplot2" data-rdoc="scale_colour_viridis_d"} et `scale_colour_viridis_d`{data-pkg="ggplot2" data-rdoc="scale_colour_viridis_d"} pour des variables discrètes.
### ggsci
L'extension `ggsci`{.pkg} fournie plusieurs palettes de couleurs inspirées de journaux scientifiques (comme le *Lancet* ou le *New England Journal of Medicine*) mais aussi de séries/films (comme les *Simpsons* ou *Star Trek*).
On y trouve également des palettes continues basées sur *Material Design* de **Google**.
Toutes ces palettes sont directement utilisables avec `ggplot2`{.pkg}.
Plus d'informations sur <https://cran.r-project.org/web/packages/ggsci/vignettes/ggsci.html>.
### hrbrthemes
L'extension `hrbrthemes`{.pkg} propose deux palettes discrètes : `ipsum_pal`{data-pkg="hrbrthemes"} et `ft_pal`{data-pkg="hrbrthemes"} ainsi que les fonctions correspondantes pour `ggplot2`{.pkg}.
```{r, fig.height=3, fig.width=3, message=FALSE}
library(hrbrthemes)
scales::show_col(ipsum_pal()(9))
scales::show_col(ft_pal()(9))
```
### ggthemes
L'extension `ggthemes`{.pkg} fournit plusieurs palettes de couleurs, en particulier `few_pal`{data-pkg="ggthemes"} issue de l'ouvrage *Show Me the Numbers* (2012) de Stephen Few ; `colorblind_pal`{data-pkg="ggthemes"} adaptées aux personnes daltoniennes ; `ptol_pal`{data-pkg="ggthemes"} inspirée de l'ouvrage *Colour Schemes* (2012) de Paul Tol ; et diverses autres (voir <https://jrnold.github.io/ggthemes/>).
```{r fig.height=3, fig.width=3, message=FALSE, warning=FALSE}
library(ggthemes)
scales::show_col(few_pal()(8))
scales::show_col(few_pal("Dark")(8))
scales::show_col(colorblind_pal()(8))
scales::show_col(ptol_pal()(12))
```
### khroma
L'extension `khroma`{.pkg} implémente elle aussi les palettes de couleurs proposées par Paul Tol dans *Colour Schemes* (2012) mais de manière plus complète que `ggthemes`{.pkg}.
```{r}
library(khroma)
plot_scheme(colour("bright")(7), colours = TRUE)
library(ggplot2)
p <- ggplot(mpg) +
aes(x = displ, y = hwy, colour = class) +
geom_point()
p + scale_colour_bright()
```
```{r}
plot_scheme(colour("vibrant")(7), colours = TRUE)
p + scale_colour_vibrant()
```
```{r}
plot_scheme(colour("muted")(9), colours = TRUE)
p + scale_colour_muted()
```
Pour plus de détails, voir https://khroma.archaeo.science/articles/tol.html
### paletteer
L'extension `paletteer`{.pkg} vise à proposer une interface unifiée pour l'utilisation de palettes de couleurs fournies par d'autres extensions.
`scale_color_paletteer_d`{data-pkg="paletteer"} et `scale_color_paletteer_c`{data-pkg="paletteer"} permettent de sélectionner une des palettes disponibles avec un usage avec `ggplot2`{.pkg}. Il existe bien entendu leur équivalent pour l'esthétique *fill*.
```{r}
library(paletteer)
ggplot(iris) +
aes(Sepal.Length, Sepal.Width, color = Species) +
geom_point() +
scale_color_paletteer_d("nord::aurora")
```
Voici une liste de palettes disponibles via `paletteer`{.pkg} :
```{r echo=FALSE}
library(gt)
info_paletteer() %>%
tab_header(title = NULL, subtitle = NULL)
```