Chapitre 9 Créer des cartes avec ggplot2
Dans ce chapitre, nous allons utiliser les librairies suivantes.
library(sf)
library(tidyverse)
library(ggplot2)
library(patchwork)
library(lwgeom)
#remotes::install_github("MaelTheuliere/variousdata")
library(variousdata)
library(ggspatial)
9.1 Quelques rappels sur ggplot2
9.1.1 Présentation du package ggplot2
ggplot 2 est un package créé par Hadley Wickham et Winston Chang pour implémenter dans R la vision développée par Leland Wilkinson dans The Grammar of Graphics (Statistics and Computing) de la conception de graphiques.
Le but est de fournir une approche unique pour produire quasiment toute valorisation graphique de données que l’on peut trouver dans des revues scientifiques, les journaux, dans l’analyse statistique ou la data visualisation.
Ce package aujourd’hui s’inscrit dans R dans le framework Tidyverse qui propose une approche cohérente sur l’ensemble de la chaîne de vie de la donnée : importation, préparation des données, analyse et valorisation.
9.1.2 Le Tidyverse
9.1.3 ggplot 2 : les concepts clefs
Pour construire un graphique avec ggplot il va falloir lui définir plusieurs éléments :
la donnée : ggplot2 permet de travailler sur des vecteurs, des dataframes, des tibbles, ou des données spatiales ;
le mapping : on définit dans l’aesthetic (ou aes) le mapping, c’est à dire ce que l’on veut représenter qui dépend des variables (quelle variable sur l’axe x, sur l’axe y, quelle variable pour définir une graduation de couleurs…) ;
les paramètres : on définit les autres paramètres qui dépendent de constantes (par exemple : je veux que toutes mes lignes soient rouges ou de taille 2 pixels) ;
le layer (“forme géométrique”) : on définit sous quelle représentation graphique on représente les paramètres précédents. Sous ggplot, ces fonctions sont de la forme geom_XX ;
L’écriture type d’un graphique sera donc:
On va ensuite pouvoir partir de cette base pour l’enrichir avec des fonctions supplémentaires.
Chaque fonction s’enchaine avec des +
comme les %>%
.
9.1.4 Le mapping
9.1.4.1 Les paramètres du mapping
Dans l’exemple qui suit, la représentation géographique utilisée est le nuage de point geom_point()
.
D’autres types de représentations graphiques sont présentées dans la partie suivante.
L’aesthetic sert à identifier les variables que l’on souhaite représenter. Par exemple, si l’on souhaite représenter le taux de mortalité maternelle (Maternal_mortality_ratio) en fonction du produit intérieur brut (Gross_Domestic_Product_GDP) :
sdg_indicators %>%
filter(timeperiod ==2015) %>%
ggplot() +
geom_point(aes(x = gdp_per_cap, y = sh_sta_mmr))
De plus, la fonction aes()
admet d’autres arguments qui permettent de modifier l’apparence du graphique selon une 3ème variable du jeu de données.
colour
: la couleur,shape
: la forme,size
: la taille,alpha
: la transparence,fill
: le remplissage ;
9.1.4.2 Les “autres” paramètres
Il est possible de spécifier des paramètres qui seront valables pour l’ensemble du graphique. On retrouve entre autre les mêmes paramètres que proposés dans l’aes mais il faut alors les passer en dehors de l’aesthetic.
Par exemple si l’on souhaite modifier la transparance et la taille de l’ensemble des points du graphique précédent:
sdg_indicators %>%
filter(timeperiod ==2015) %>%
ggplot() +
geom_point(aes(x = gdp_per_cap,
y = sh_sta_mmr,
color = continent),
alpha = 0.5,
size = 1.9
)
De même si l’on souhaite modifier la couleur générale:
sdg_indicators %>%
filter(timeperiod ==2015) %>%
ggplot() +
geom_point(aes(x = gdp_per_cap,
y = sh_sta_mmr),
color = "red",
alpha = 0.5,
size = 1.9
)
Pour choisir et modifier facilement les couleurs d’un graphique, il existe un addin développé par Dean Attali: Colour Picker
.
Il est installable comme n’importe quel package.
Pour plus d’informations: https://github.com/daattali/colourpicker
9.1.5 L’habillage simple
9.1.5.1 Titre et libellé des axes
Chaque nouvel élément graphique est à rajouter sous forme de layer, ici nous utilisons la fonction labs()
qui permet de labelliser tout les éléments possibles de l’aesthétic, ainsi que le titre (title
), le sous titre (subtitle
) et le bas de page (caption
)
sdg_indicators %>%
filter(timeperiod ==2015) %>%
ggplot() +
geom_point(aes(x = gdp_per_cap,
y = sh_sta_mmr,
color = continent),
alpha = 0.5,
size = 1.9
) +
labs(
title = "Mortalité maternelle en fonction du PIB par habitant",
subtitle = "En 2015",
x = "PIB par habitant",
y = "Taux de mortalité de la mère \n(pour 100 000 naissances)",
caption = "Source : ODD / ONU"
)
A noter qu’il existe plusieurs autres façons de spécifier ces élèments par des fonctions spécifiques: ggtitle, xlab, ylab,…
9.1.5.2 Légende
Les fonctions guide()
et guides
permettent de modifier finement la légende.
Les guides peuvent être spécifiées dans chaque scale_
ou dans une instruction guides
.
sdg_indicators %>%
filter(timeperiod ==2015) %>%
ggplot() +
geom_point(aes(x = gdp_per_cap,
y = sh_sta_mmr,
color = continent),
alpha = 0.5,
size = 1.9
) +
labs(
title = "Mortalité maternelle en fonction du PIB par habitant",
subtitle = "En 2015",
x = "PIB par habitant",
y = "Taux de mortalité de la mère \n(pour 100 000 naissances)",
caption = "Source : ODD / ONU"
) +
guides(color = guide_legend(
direction = "horizontal",
order = 1,
title.position = "top",
title.hjust = 0.5,
nrow = 1,
label.position = "bottom"
)) +
theme(legend.position = "bottom")
9.1.5.3 Annotation
Il est aussi possible de rajouter des annotations de type texte, par exemple, “à la volée”.
sdg_indicators %>%
filter(timeperiod ==2015) %>%
ggplot() +
geom_point(aes(x = gdp_per_cap,
y = sh_sta_mmr,
color = continent),
alpha = 0.5,
size = 1.9
) +
labs(
title = "Mortalité maternelle en fonction du PIB par habitant",
subtitle = "En 2015",
x = "PIB par habitant",
y = "Taux de mortalité de la mère \n(pour 100 000 naissances)",
caption = "Source : ODD / ONU"
) +
annotate("text", x = 100000, y = 2, label = "je rajoute mon texte", color = "blue")
La fonction annotate()
permet aussi d’ajouter d’autres types d’annotation comme par exemple des rectangles:
sdg_indicators %>%
filter(timeperiod ==2015) %>%
ggplot() +
geom_point(aes(x = gdp_per_cap,
y = sh_sta_mmr,
color = continent),
alpha = 0.5,
size = 1.9
) +
labs(
title = "Mortalité maternelle en fonction du PIB par habitant",
subtitle = "En 2015",
x = "PIB par habitant",
y = "Taux de mortalité de la mère \n(pour 100 000 naissances)",
caption = "Source : ODD / ONU"
) +
annotate("rect", xmin = 10, xmax = Inf, ymin = -Inf, ymax = Inf, fill = "red", alpha = 0.2) +
annotate("rect", xmin = -Inf, xmax = Inf, ymin = -Inf, ymax = 2, fill = "green", alpha = 0.2)
9.1.6 Les thèmes
Pour modifier simplement la position de la légende, c’est la fonction theme()
qu’il faut utiliser.
theme()
permet de créer des templates, c’est à dire de définir tout ce qui n’est pas lié directement aux données sur un graphique, notamment:
la position, taille,couleur,police des éléments textuels
la couleur des grilles primaires et secondaires du graphique
Il existe des thèmes prédéfinis dans ggplot que l’on peut déjà utiliser.
Par exemple: theme_classic()
, theme_bw()
, theme_dark()
, …
Des packages externes permettent d’enrichir cette collection de thèmes, par exemple ggthemes
ou hrbrthemes
.
Lorsque l’on souhaite garder une cohérence entre plusieurs graphiques, le mieux est d’en définir un à part pour l’appeler ensuite.
9.1.6.1 Les fonctions “élément”
Elle utilise 4 types de fonctions:
element_text()
: pour toutes les étiquettes
PARAMÈTRE | VALEUR |
---|---|
family | la famille de la police |
face | le type de police (“plain”, “italic”, “bold”, “bold.italic”) |
colour | couleur |
size | taille en points |
hjust | justification horizontale, dans [0, 1] |
vjust | justification verticale, dans [0, 1] |
angle | angle, dans [0, 360] |
lineheight | hauteur de ligne (pour l’espacement entre les lignes) |
element_rect()
: pour les fonds et les cadres,
PARAMÈTRE | VALEUR |
---|---|
fill | la couleur de remplissage |
colour | la couleur de la bordure |
size | la taille de la bordure |
linetype | le type de ligne (“blank”, “solid”, “dashed”, “dotted”, “dotdash”, “longdash”, "twodash) |
element_line()
: pour toutes les lignes tracées,
PARAMÈTRE | VALEUR |
---|---|
colour | la couleur de ligne |
size | la taille |
linetype | le type de ligne (“blank”, “solid”, “dashed”, “dotted”, “dotdash”,“longdash”, "twodash) |
lineend | le type de fin de ligne (“round”, “butt” ou “square”) |
element_blank()
: permet de ne rien dessiner.
9.1.6.2 Les composantes
Il s’agit des différents éléments modifiables dans le thème. Par exemple:
Axes axis.line, axis.text.x, axis.text.y, axis.ticks, axis.title.x, axis.title.y,…
Légende legend.background, legend.key, legend.text, legend.title,…
Fond de graphe panel.background, panel.border, panel.grid.major, panel.grid.minor,…
etc
9.1.6.3 Quelques exemples
- Changer le fond du graphique
panel_background()
sdg_indicators %>%
filter(timeperiod ==2015) %>%
ggplot() +
geom_point(aes(x = gdp_per_cap,
y = sh_sta_mmr,
color = continent),
alpha = 0.5,
size = 1.9
) +
labs(
title = "Mortalité maternelle en fonction du PIB par habitant",
subtitle = "En 2015",
x = "PIB par habitant",
y = "Taux de mortalité de la mère \n(pour 100 000 naissances)",
caption = "Source : ODD / ONU"
) +
theme(panel.background = element_rect(fill = "Lavender", colour = "black"))
- Changer l’apparence du quadrillage :
panel_background()
sdg_indicators %>%
filter(timeperiod ==2015) %>%
ggplot() +
geom_point(aes(x = gdp_per_cap,
y = sh_sta_mmr,
color = continent),
alpha = 0.5,
size = 1.9
) +
labs(
title = "Mortalité maternelle en fonction du PIB par habitant",
subtitle = "En 2015",
x = "PIB par habitant",
y = "Taux de mortalité de la mère \n(pour 100 000 naissances)",
caption = "Source : ODD / ONU"
) +
theme(panel.grid.major = element_line(colour = "gray", size = 0.5, linetype = "dashed"))
- Changer l’apparence des étiquettes des axes :
axis_xxx()
sdg_indicators %>%
filter(timeperiod ==2015) %>%
ggplot() +
geom_point(aes(x = gdp_per_cap,
y = sh_sta_mmr,
color = continent),
alpha = 0.5,
size = 1.9
) +
labs(
title = "Mortalité maternelle en fonction du PIB par habitant",
subtitle = "En 2015",
x = "PIB par habitant",
y = "Taux de mortalité de la mère \n(pour 100 000 naissances)",
caption = "Source : ODD / ONU"
) +
theme(
axis.text.x = element_text(colour = "blue", angle = 45),
axis.title = element_text(face = "bold", colour = "orange")
)
Certains changements de paramètres ne nécessitent pas l’utilisation de fonctions element_()
.
Par exemple, pour changer la position de la légende : legend.xxx()
sdg_indicators %>%
filter(timeperiod ==2015) %>%
ggplot() +
geom_point(aes(x = gdp_per_cap,
y = sh_sta_mmr,
color = continent),
alpha = 0.5,
size = 1.9
) +
labs(
title = "Mortalité maternelle en fonction du PIB par habitant",
subtitle = "En 2015",
x = "PIB par habitant",
y = "Taux de mortalité de la mère \n(pour 100 000 naissances)",
caption = "Source : ODD / ONU"
) +
theme(legend.position = "left", legend.title = element_blank())
9.1.6.4 Modifier le thème par défaut.
La fonction theme_set()
vous permet de définir un thème par défaut pour l’ensemble de vos graphiques.
theme_set(theme_dark())
sdg_indicators %>%
filter(timeperiod ==2015) %>%
ggplot() +
geom_point(aes(x = gdp_per_cap,
y = sh_sta_mmr,
color = continent),
alpha = 0.5,
size = 1.9
) +
labs(
title = "Mortalité maternelle en fonction du PIB par habitant",
subtitle = "En 2015",
x = "PIB par habitant",
y = "Taux de mortalité de la mère \n(pour 100 000 naissances)",
caption = "Source : ODD / ONU"
)
9.1.6.5 Créer son propre thème
Un thème est une fonction R qui va prendre en paramètre des éléments que vous souhaitez pouvoir faire varier et fixer des éléments que vous souhaitez avoir comme rendu par défaut.
Créons ici un thème avec un fond vert pour le ministère de la transition écologique et solidaire. On rajoute un paramètre pour la taille de la police du titre du graphique.
theme_mtes <- function(taille_police = 14) {
theme_bw() +
theme(
plot.title = element_text(color = "white", size = taille_police, face = "bold"),
text = element_text(color = "white"),
axis.text = element_text(color = "white"),
panel.background = element_rect(fill = "lightgreen", colour = "lightgreen"),
plot.background = element_rect(fill = "#006400", colour = "lightgreen"),
legend.background = element_rect(fill = "lightgreen", colour = "lightgreen"),
legend.key = element_blank()
)
}
sdg_indicators %>%
filter(timeperiod ==2015) %>%
ggplot() +
geom_point(aes(x = gdp_per_cap,
y = sh_sta_mmr,
color = continent),
alpha = 0.5,
size = 1.9
) +
labs(
title = "Mortalité maternelle en fonction du PIB par habitant",
subtitle = "En 2015",
x = "PIB par habitant",
y = "Taux de mortalité de la mère \n(pour 100 000 naissances)",
caption = "Source : ODD / ONU"
) +
theme_mtes()
9.1.7 Les scales
Les fonctions scales()
permettent globalement de paramétrer les éléments rentrés dans l’aesthétic :
Si je veux un gradient de couleurs fonction d’une variable continue : quelle palette de couleurs je choisie, comment je cale mon dégradé en fonction de cette variable continue ?
Si je met une variable continue en ordonnée, comment je définis le minimum et maximum de cette axe, sa position, les valeurs que j’affiche sur l’échelle…
L’ensemble des scales possibles peuvent se décrire sous la forme suivante:
scale_xx_yy()
ou xx
peut être un des paramètres de l’aesthétic :
xx | description |
---|---|
alpha | transparence |
color | couleur des lignes ou des points |
fill | couleurs des aires |
linetype | type de ligne (continue,pointillée,…) |
shape | forme des points |
size | aire des points |
x | variable de l’axe x |
y | variable de l’axe y |
Et yy
un type de paramétrage :
yy | description |
---|---|
continuous | gérer les variables continue |
discrete | gérer les variables discrètes |
date | gérer une variable au format date |
reverse | inverser l’axe |
log | convertire l’échelle d’une variable continue en échelle logarithmique |
log10 | convertire l’échelle d’une variable continue en échelle logarithmique décimale |
viridis | utiliser une palette de couleur viridis |
brewer | utiliser une palette de couleur brewer (variable discrète) |
distiller | utiliser une palette de couleur brewer (variable continue) |
gradient | utiliser un gradient de 2 couleurs |
gradient2 | utiliser un gradient divergent de 3 couleurs |
sdg_indicators %>%
filter(timeperiod ==2015) %>%
ggplot() +
geom_point(aes(x = gdp_per_cap,
y = sh_sta_mmr,
color = continent),
alpha = 0.5,
size = 1.9
) +
labs(
title = "Mortalité maternelle en fonction du PIB par habitant",
subtitle = "En 2015",
x = "PIB par habitant",
y = "Taux de mortalité de la mère \n(pour 100 000 naissances)",
caption = "Source : ODD / ONU"
) +
scale_color_brewer(type = "qual")
Par exemple on peut exploiter une fonction scale pour définir une échelle logarithimique sur un axe.
sdg_indicators %>%
filter(timeperiod ==2015) %>%
ggplot() +
geom_point(aes(x = gdp_per_cap,
y = sh_sta_mmr,
color = continent),
alpha = 0.5,
size = 1.9
) +
labs(
title = "Mortalité maternelle en fonction du PIB par habitant",
subtitle = "En 2015",
x = "PIB par habitant",
y = "Taux de mortalité de la mère \n(pour 100 000 naissances)",
caption = "Source : ODD / ONU"
) +
scale_color_brewer(type = "qual") +
scale_x_log10() +
scale_y_log10()
9.1.7.1 Formatage spécifique
- Transformation en pourcentage;
- Ajout du séparateur des milliers;
- Ajout du symbole €;
9.1.8 La mise en page de plusieurs graphiques
Le package cowplot
permet la combinaison de plusieurs graphiques. Il est composé de plusieurs fonctions.
- le fonction
plot_grid()
qui permet de disposer n graphes sur i colonnes et j lignes
gg1 <- sdg_indicators %>%
filter(timeperiod ==2015) %>%
ggplot() +
geom_point(aes(x = gdp_per_cap,
y = sh_sta_mmr,
color = continent),
alpha = 0.5,
size = 1.9
) +
labs(
title = "Mortalité maternelle en fonction du PIB par habitant",
subtitle = "En 2015",
x = "PIB par habitant",
y = "Taux de mortalité de la mère \n(pour 100 000 naissances)",
caption = "Source : ODD / ONU"
) +
scale_x_log10() +
scale_y_log10() +
theme(axis.title = element_text(size = 9))
gg2 <- sdg_indicators %>%
filter(timeperiod ==2015) %>%
ggplot()+
geom_density(aes(x=gdp_per_cap))+
scale_x_log10()
plot_grid(gg1, gg2, ncol = 1, nrow = 2)
- la fonction
draw_plot()
associée àggdraw()
qui permet de disposer les graphiques à des places spécifiques.
ggdraw()
initialise le graphique
gg3 <- sdg_indicators %>%
filter(timeperiod == 2015) %>%
ggplot() +
geom_bar(aes(x = continent, fill = continent)) +
theme(
axis.title.x = element_blank(),
axis.text.x = element_blank()
)
ggdraw() +
draw_plot(gg1, x = 0, y = .5, width = 1, height = .5) +
draw_plot(gg2, x = 0, y = 0, width = .3, height = .5) +
draw_plot(gg3, x = 0.3, y = 0, width = 0.7, height = .5)
9.1.9 Les facettes
Lorsque l’on veut pouvoir réaliser un graphique pour plusieurs sous-ensembles, les facettes sont alors très utiles. On va ici l’illustrer avec la réalisation du même graphique ci-dessus mais pour plusieurs années différentes.
sdg_indicators %>%
filter(timeperiod %in% c(2000, 2005, 2010, 2015),
geoareaname %in% c("France","Canada","Burkina Faso","China","Australia")) %>%
ggplot() +
geom_bar(aes(x = geoareaname, weight = sh_sta_mmr, fill = continent)) +
theme_minimal() +
scale_fill_viridis_d() +
coord_flip() +
scale_y_log10()+
labs(
title = "Mortalité maternelle sur quelques pays",
subtitle = "En 2015",
y = "Taux de mortalité de la mère \n(pour 100 000 naissances), échelle logarithmique",
x = "Pays",
fill = "Pays"
) +
theme(legend.position = "none") +
facet_wrap(~timeperiod)
L’exemple pris ici “scinde” notre table en fonction d’une seule variable, mais on peut le faire sur plusieurs variables également.
On peut choisir avec facet_wrap()
:
- le nombre de colonnes ou de ligne sur lesquel on veut voir s’afficher le graphique
- si on veut fixer l’échelle de l’un ou l’autre des axes ou les deux
sdg_indicators %>%
filter(timeperiod %in% c(2000, 2005, 2010, 2015),
geoareaname %in% c("France","Canada","Burkina Faso","China","Australia")) %>%
ggplot() +
geom_bar(aes(x = geoareaname, weight = sh_sta_mmr, fill = continent)) +
theme_minimal() +
scale_fill_viridis_d() +
coord_flip() +
scale_y_log10()+
labs(
title = "Mortalité maternelle sur quelques pays",
subtitle = "En 2015",
y = "Taux de mortalité de la mère \n(pour 100 000 naissances), échelle logarithmique",
x = "Pays",
fill = "Pays"
) +
theme(legend.position = "none") +
facet_wrap(~timeperiod, ncol = 4)
9.1.10 Exporter un graphique
ggplot contient une fonction ggsave()
qui permet d’exporter nos graphiques au format image dans les formats suivants : eps, ps, tex (pictex), pdf, jpeg, tiff, png, bmp, svg or wmf
p <- sdg_indicators %>%
filter(timeperiod %in% c(2000, 2005, 2010, 2015),
geoareaname %in% c("France","Canada","Burkina Faso","China","Australia")) %>%
ggplot() +
geom_bar(aes(x = geoareaname, weight = sh_sta_mmr, fill = continent)) +
theme_minimal() +
scale_fill_viridis_d() +
coord_flip() +
scale_y_log10()+
labs(
title = "Mortalité maternelle sur quelques pays",
subtitle = "En 2015",
y = "Taux de mortalité de la mère \n(pour 100 000 naissances), échelle logarithmique",
x = "Pays",
fill = "Pays"
) +
theme(legend.position = "none") +
facet_wrap(~timeperiod, ncol = 4)
ggsave("figures/Mortalité maternelle sur quelques pays du globe.svg", p, width = 12, height = 5)
9.2 Faire des cartes avec ggplot2
9.2.1 Les cartes choroplèthe
ggplot2 intègre une fonction geom permettant l’utilisation de données géomatrique : geom_sf()
Celle ci doit se coupler avec la fonction coord_sf()
qui permet de s’assurer en cas de superposition de couches que celles-ci utiliseront bien le même crs en spécifiant le datum. coord_sf()
permet également de zoomer sur la carte en spécifiant les bornes x et y de la carte, ou également de définir les labels des axes.
Le premier exemple que nous allons pouvoir voir, c’est une carte choroplèthe.
Pour cela, préalablement, nous allons intégrer à nos données un fond de carte : le spatial dataframe World
présent dans le package tmap
map_sdg_indicators <- sdg_indicators_sf %>%
filter(timeperiod == "2015") %>%
ggplot() +
geom_sf(aes(fill = log(sh_sta_mmr)),color="white",size=.2)+
scale_fill_viridis_c()+
theme_minimal()+
theme(panel.background = element_rect(fill = "light blue"))
map_sdg_indicators
On peut exploiter de la même façon les différentes fonctions vues précédement. Par exemple avec un peu de thème et de facet.
sdg_indicators_sf %>%
filter(timeperiod %in% c("2000","2005","2010","2015")) %>%
ggplot() +
geom_sf(aes(fill = log(sh_sta_mmr)),color="white",size=.2)+
scale_fill_viridis_c(
option = "magma",
direction = 1,
breaks = c(0, 1, 2, 3, 4, 5, 6, 7))+
guides(
colour = F,
order = 0,
fill = guide_legend(
direction = "horizontal",
keyheight = unit(2, units = "mm"),
keywidth = unit(20, units = "mm"),
order = 1,
title.position = "top",
title.hjust = 0.5,
nrow = 1,
label.position = "bottom",
label.hjust = 1
)
) +
theme_minimal()+
theme(legend.position = "bottom",
panel.background = element_rect(fill = "light blue"))+
labs(fill = "Taux de mortalité infantile (échelle logarithmique)") +
facet_wrap(~timeperiod, drop = T)
9.2.2 Les cartes à ronds proportionnels
ggplot ne peut attribuer par défaut un rond proportionnel à un polygone.
Pour travailler sur des ronds proportionnels, il faut d’abord créer le centroid de nos zones et ensuite tracer un rond proportionnel avec geom_sf()
.
World_centroid <- st_centroid(World, of_largest_polygon = T)
sdg_indicators_sf_centroid <- World_centroid %>%
left_join(sdg_indicators)
map_sdg_indicators_centroid <- sdg_indicators_sf_centroid %>%
filter(timeperiod == "2015",!is.na(sh_sta_mmr)) %>%
ggplot() +
geom_sf(data = World, fill = "white") +
geom_sf(aes(color = sh_sta_mmr, size = sh_sta_mmr))+
theme_minimal()+
theme(panel.background = element_rect(fill = "light blue"))
map_sdg_indicators_centroid
9.2.3 Ajouter une barre d’échelle et la flèche du nord
Le package ggspatial
permet d’enrichir simplement nos cartes ggplot2
avec une barre d’échelle et la flèche du nord.
Les deux fonctions qui permettent cela sont annotation_scale()
et annotation_north_arrow()
.
L’utilisation de ces fonctions nécessitent un système de coordonnées géographiques.
sdg_indicators_sf %>%
filter(timeperiod == "2015") %>%
st_transform(crs = 4326) %>%
ggplot() +
geom_sf(aes(fill = log(sh_sta_mmr)), color = "white", size = .2) +
coord_sf(crs = 4326) +
scale_fill_viridis_c() +
theme_minimal() +
theme(panel.background = element_rect(fill = "light blue")) +
annotation_scale(location = "br", line_width = .5) +
annotation_north_arrow(location = "bl", height = unit(0.7, "cm"), width = unit(0.7, "cm"))
9.2.4 Mettre plusieurs cartes côte à côte
On peut a partir d’une même carte vouloir réaliser un zoom sur une sous partie de celle-ci.
coord_sf()
va nous permettre de zoomer sur une carte, et cow_plot()
va nous permettre d’afficher nos deux cartes côte à côte.
Pour zoomer sur une carte,coord_sf()
va avoir besoin des coordonnées x et y du cadre sur lequel on veut zoomer.
Le plus simple pour cela est de filtrer préalablement
notre spatial dataframe et de récupérer la bbox de celle-ci.
Filtrons par exemple sur le continent africain.
On peut ensuite réaliser une carte zoomée sur l’Afrique.
map_sdg_indicators_africa <- sdg_indicators_sf %>%
filter(timeperiod == "2015") %>%
ggplot() +
geom_sf(aes(fill = log(sh_sta_mmr)), color = "white", size = .2) +
coord_sf(xlim = c(bbox_africa[1],bbox_africa[3]),
ylim = c(bbox_africa[2],bbox_africa[4])
) +
scale_fill_viridis_c() +
theme_minimal() +
theme(legend.position = "right", panel.background = element_rect(fill = "light blue"))
On peut utiliser ensuite plot_grid()
pour afficher nos cartes côte à côte. Il faut jouer sur les largeurs relatives pour que les deux cartes s’agencent bien.