-
Notifications
You must be signed in to change notification settings - Fork 0
/
04-prepa-ggplot.Rmd
196 lines (154 loc) · 6.37 KB
/
04-prepa-ggplot.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
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
# Palette de couleurs
Dans ce notebook, nous allons réaliser un graphique assez simple avec `ggplot`.
## Lecture des données avec transformation
Lisons les données de flux et rappelons la fonction `getStatsFlux` :
```{r warning = FALSE, message = FALSE}
library(tidyverse)
flux <- read_csv("data/obs_artif_conso_com_2009_2020_V2.csv")
```
Chargeons notre fichier `helpers.R` qui contient nos fonctions :
```{r warning = FALSE, message = FALSE}
source("helpers/helpers.R", encoding = "UTF-8")
```
Nous avons notre fonction `getStatsFlux` pour voir les flux par année, pour une commune donnée :
```{r}
df <- flux %>% getStatsFlux("13001")
```
## Premier graphique
Maintenant que nous parvenons à récupérer les stats bien formatées, nous pouvons tenter le graphique des flux d'artificialisation sur Aix en Provence :
```{r}
library(ggplot2)
p <- ggplot(data = df,
aes(x = year,
y = value,
fill = type)) +
geom_bar(stat = "identity")
p
```
C'est vraiment le graphique le plus basique que nous puissions réaliser.
## Quelques améliorations
Nous pouvons en changer quelques éléments, améliorer l'esthétique :
```{r}
# Ordre des types
df$type <- as.character(df$type)
df$type <- factor(df$type, levels = c("Habitat", "Activité", "Mixte", "Inconnu"))
# Plot
p <- ggplot(data = df,
aes(x = year,
y = value,
fill = type)) +
geom_bar(stat = "identity") +
theme(
axis.title.x = element_blank(), # pas de titre pour l'axe X
axis.ticks.x = element_blank(), # pas de tirets pour l'axe X
axis.text.x = element_text(vjust = 3), # repositionnement des années un peu plus en haut (vu qu'on enlève les tirets)
axis.ticks.y = element_blank(), # pas de tirets sur l'axe Y
axis.title.y = element_blank(), # pas de titre pour l'axe Y
panel.border = element_blank(), # pas de bordure
panel.grid.major.x = element_blank(), # pas de lignes verticales
panel.grid.minor.x = element_blank(), # pas de "sous"-lignes verticales
legend.position = "bottom", # légende en vas
legend.title = element_blank(), # pas de titre pour la légende
plot.title = element_text(face = "bold", size = 10, colour = "grey60"), # titre en gras et en gris
legend.text = element_text(size = 8) # taille de texte pour la légende (plus petit)
) +
ggtitle("Flux d'artificialisation par année en Ha") +
scale_y_continuous(expand = c(0, 0)) # réinitialise la marge en x et y vers les coordonnées 0,0 (au plus proche)
p
```
Nous avons allégé au maximum le graphique. Nous avons mis la légende en bas pour qu'elle n'écrase pas le graphique
Mais les couleurs ne sont pas forcément encore tops !..
## Couleurs HCL (Hue Chroma Luminance)
### A propos
Nous utilisons la modélisation de couleurs HCL (pour Hue Chroma Luminance).
En HCL, une couleur est définie selon trois paramètres :
- **Hue**, qui définit la teinte (bleue, rouge, ...) d'une couleur
- **Chroma** son côté coloré (colourfulness)
- **Luminance** sa luminosité
### Nos couleurs
Nous allons prendre 4 couleurs pour notre palette :
- <span style="color:blue;font-weight:700;">Bleue</span> pour l'habitat
- <span style="color:red;font-weight:700;">Rouge</span> pour l'activité (le rouge rappelle l'activité)
- <span style="color:darkmagenta;font-weight:700;">Magenta</span> pour mixte (un peu un mélange des deux premiers)
- <span style="color:grey;font-weight:700;">Gris</span> pour la catégorie Inconnu (gris est une couleur neutre qui symbolise bien l'inconnu)
Par défaut, le chroma sera fixé à 50, la luminosité à 80 (sur une échelle de 0 à 100) :
```{r warning = FALSE}
library(colorspace)
colorBlue <- hcl(h = 220,
c = 50,
l = 80, fixup = TRUE)
colorRed <- hcl(h = 4,
c = 50,
l = 80, fixup = TRUE)
colorMagenta <- hcl(h = 300,
c = 50,
l = 80, fixup = TRUE)
colorGrey <- hcl(h = 0,
c = 0,
l = 80, fixup = TRUE)
myPalette <- c("blue" = colorBlue,
"red" = colorRed,
"magenta" = colorMagenta,
"grey" = colorGrey)
```
### Assistants
A savoir que la librairie colorspace intègre un assistant pour choisir les couleurs dans un espace HCL :
```{r eval = FALSE}
hclcolorpicker
```
Le site de Sciences Po MediaLab propose un assistant vraiment pas mal pour choisir les couleurs HCL. Ce dernier s'appelle ["I Want Hue"](https://medialab.github.io/iwanthue/)
Testons notre palette :
```{r}
demoplot(myPalette, "bar")
```
Voici une représentation des couleurs dans l'espace HCL :
```{r}
hclplot(myPalette)
```
### Utilisation dans notre graphique
Utilisons cette nouvelle palette de couleurs dans notre graphique :
```{r}
p +
scale_fill_manual(
name = "Flux\nd'artificialisation\n2009-2020",
labels = c("Habitat", "Activité", "Mixte", "Inconnu"),
values = as.character(myPalette)
)
```
## Export de la palette
Exportons notre palette de couleurs pour la réutiliser plus tard :
```{r}
saveRDS(myPalette, "myPalette.rds")
```
## Une couleur plus "punchy"
Utilisons une couleur plus "punchy" pour le magenta en mettant un chrom de 100 :
```{r}
p + scale_fill_manual(
name = "Flux\nd'artificialisation\n2009-2020",
labels = c("Habitat", "Activité", "Mixte", "Inconnu"),
values = c(colorBlue,
colorRed,
hcl(h = 300, c = 100, l = 80), # Magenta
colorGrey)
)
```
## Couleurs Cerema
Nous aurions aussi pu choisir les couleurs de l'établissement.
Lisons la palette de couleurs Cerema :
```{r warning=FALSE, message=FALSE}
library(rjson)
paletteCerema <- fromJSON(file = "palettes/palette_cerema.json")
paletteCerema
```
Elle est constituée d'une couleur pour le texte, pour les couleurs principales, secondaires et complémentaires.
Choisissons pour les couleurs des flux d'habitat, d'activité et mixtes des couleurs secondaires de la palette Cerema. Pour les données inconnues, on prend la couleur grise d'avant :
```{r}
p + scale_fill_manual(
name = "Flux\nd'artificialisation\n2009-2020",
labels = c("Habitat", "Activité", "Mixte", "Inconnu"),
values = c(paletteCerema$secondaire$bleu,
paletteCerema$secondaire$orange,
paletteCerema$secondaire$vert,
colorGrey)
)
```