Chapitre 15 Annexe : créer des cartes avec tmap
tmap
est un package dédié à la réalisation de cartes sous R.
La syntaxe est très proche de ggplot
, avec l’opérateur +
pour enchaîner les options.
L’équivalent des geom_xx()
dans tmap
sont les fonctions suivantes :
tm_lines()
: afficher des lignestm_polygons()
: afficher des polygonestm_raster()
: afficher un rastertm_bubbles()
: afficher des ronds proportionnelstm_markers()
: afficher des marqueurstm_text()
: afficher du texte
Les différences avec ggplot2
:
- Les variables s’appellent dans des cotes
""
; - Le facetting peut se faire sur des données au format large (une carte par colonne et non une carte par modalité d’une variable) ;
- Les fonctions
tm_xx()
incluent la définition des classes (nombre de classe, définition des classes et des palettes) sans passer par une fonctionscale()
dont l’équivalent n’existe pas.
La mise en page se définit avec la fonction tm_layout()
, la légende avec tm_legend()
Dans ce chapitre nous allons utiliser les packages suivants
# CRAN
library(sf)
library(tidyverse)
library(tmap)
library(tmaptools)
library(viridis)
# Github
library(variousdata) # remotes::install_github("MaelTheuliere/variousdata")
15.1 Fonction tm_shape()
Pour charger une donnée géométrique à visualiser avec {tmap}, il faut utiliser la fonction tm_shape()
. tm_shape()
initie la création de la carte, en fixant plusieurs options de base de notre carte : la projection, la bbox, un facteur de simplification…
data("World")
wgs_84 <- tm_shape(World, projection = st_crs(4326)) +
tm_polygons() +
tm_layout("Le monde en projection WGS84", inner.margins=c(0,0,.1,0), title.size=.8)
robin <- tm_shape(World, projection = st_crs("+proj=wintri")) +
tm_polygons() +
tm_layout("Le monde en projection Winkel-Tripel", inner.margins=c(0,0,.1,0), title.size=.8)
15.2 Exemple de carte choroplèthe
La fonction tm_polygons()
permet de faire des cartes choroplèthe.
Nous partons ici des banque d’indicateurs internationaux tenue par l’ONU sur les Objectifs de développement durable, diffusée dans le package {variousdata}
.
15.2.1 Préparation des données
On prépare les données en associant les indicateurs à leur géographie.
15.3 Exemple de carte à ronds proportionnels
La fonction tm_bubble()
permet de faire des cartes à ronds proportionnels.
L’utilisation de tm_polygons()
permet sans lui spécifier de paramètre d’afficher les frontières des pays avec une couleur de remplissage par défaut.
15.4 Discretisation
Pour définir comment notre variable continue va être discrétisée, deux méthodes :
discrétiser à la main et indiquer les valeurs limites dans l’option
breaks
de notretm_xx
utiliser l’option
style
destm_xx
qui permettent de choisir un algorithme de discrétisation.
La méthode de jenks par exemple permet de maximiser la variance interclasse.
sdg_indicators_sf %>%
filter(timeperiod == "2015") %>%
tm_shape()+
tm_polygons("sh_sta_mmr", textNA = "Valeur manquante", style="jenks")
L’option n =
permet d’imposer un nombre de classes à la méthode utilisée.
15.5 Exemples de cartes avec facet
tm_facets()
permet de réaliser des cartes à facette avec la même logique que celle de ggplot2
.
15.6 Gestion des palettes
La fonction tmaptools::palette_explorer()
permet d’accéder à une interface très simple de définition d’une palette de couleur à partir des palette brewer.
sdg_indicators_sf %>%
filter(timeperiod == "2015") %>%
tm_shape() +
tm_polygons("sh_sta_mmr", textNA = "Valeur manquante", style = "jenks",
palette = get_brewer_pal("OrRd", n = 5, contrast = c(0.2, 1), plot = FALSE))
On peut également utiliser n’importe qu’elle palette, par exemple la palette viridis, mais sans l’interface proposée par palette_explorer()
:
15.7 La mise en page
tm_layout()
permet de contrôler les polices, la légende, les marges, les couleurs.
L’option design.mode = TRUE
permet de voir visuellement les marges, la position de la légende.
Le titre de la légende ne se définit pas dans tm_layout()
mais dans tm_polygons()
.
L’option title
de ces fonctions est l’équivalent d’un libellé de la variable mise dans l’aesthetic.
On peut rajouter une barre d’échelle et la flèche du nord avec tm_scale_bar()
et tm_compass()
.
sdg_indicators_sf %>%
filter(timeperiod == "2015") %>%
tm_shape()+
tm_polygons("sh_sta_mmr",textNA = "Valeur manquante", style = "jenks",
palette = viridis(5, alpha = 1, begin = 0.3, end = 1, direction = 1, option = "D"),
title = "Taux de mortalité de la mère \n(pour 100 000 naissances)")+
tm_layout(main.title = "Taux de mortalité de la mère \n(pour 100 000 naissances) dans le monde",
main.title.size = 1.2,
bg.color = "skyblue",
legend.position = c("left","bottom"),
legend.bg.color = "white",
legend.bg.alpha = .4,
legend.outside = FALSE,
main.title.position = "center",
frame = FALSE)+
tm_scale_bar(position = c("center","bottom"))+
tm_compass(position = c("right","top"))
Avec les cartes en ronds proportionnels, on peut spécifier un titre pour la couleur et la taille du rond.
sdg_indicators_sf %>%
filter(timeperiod == "2015") %>%
tm_shape()+
tm_polygons()+
tm_bubbles(size="sh_sta_mmr",col="sh_sta_mmr",style="jenks",
palette=viridis(5, alpha = 1, begin = 0, end = 1, direction = 1, option = "D"),
title.col="",
title.size="Taux de mortalité de la mère \n(pour 100 000 naissances)")+
tm_layout(main.title="Taux de mortalité de la mère \n(pour 100 000 naissances) dans le monde",
main.title.size=1.2,
outer.margins=c(0,0,0,0),
legend.position=c("left","bottom"),
legend.outside = FALSE,
main.title.position = "center",
inner.margins = c(0, 0, 0, 0),
frame = FALSE)+
tm_scale_bar(position = c("center","bottom"))+
tm_compass(position = c("right","top"))
15.8 Assembler plusieurs cartes
tmap_arrange()
permet d’assembler plusieurs cartes ensemble. La limite de tmap_arrange()
: la fonction ne permet pas de fixer un vecteur de largeur différent pour les cartes. A utiliser donc sur des cas qui peuvent convenir à cette contrainte.
bbox_africa <- World %>%
filter(continent=="Africa") %>%
st_bbox()
tmap_sdg_indicators <- sdg_indicators_sf %>%
filter(timeperiod == "2015") %>%
tm_shape()+
tm_polygons("sh_sta_mmr", style = "jenks",palette = viridis(5, alpha = 1, begin = 0.3, end = 1, direction = 1, option = "D"))+
tm_layout()
tmap_sdg_indicators_africa <- sdg_indicators_sf %>%
filter(timeperiod == "2015") %>%
tm_shape(bbox = bbox_africa)+
tm_polygons("sh_sta_mmr", style = "jenks",
palette = viridis(5, alpha = 1, begin = 0.3, end = 1, direction = 1, option = "D"))+
tm_layout(legend.show = FALSE)
tmap_arrange(tmap_sdg_indicators, tmap_sdg_indicators_africa, nrow = 1)
15.9 tmap pour le web
tmap
permet simplement de convertir une carte image en carte interactive. Pour cela il faut changer le mode d’affichage de la carte avec tmap_mode()
15.10 Export d’une carte
La fonction tmap_save()
permet d’exporter une carte tmap
. Suivant le tmap_mode()
activé, l’export peut se faire en fichier image ou en fichier html.
carte <- sdg_indicators_sf %>%
filter(timeperiod == "2015") %>%
tm_shape() +
tm_polygons() +
tm_bubbles(
size = "sh_sta_mmr", col = "sh_sta_mmr",
palette = viridis(5, alpha = 1, begin = 0.3, end = 1, direction = 1, option = "D"),
title.col = "",
title.size = "Taux de mortalité de la mère \n(pour 100 000 naissances)"
) +
tm_layout(
main.title = "Taux de mortalité de la mère \n(pour 100 000 naissances) dans le monde",
main.title.size = 1.2,
outer.margins = c(0, 0, 0, 0),
legend.position = c("left", "bottom"),
legend.outside = FALSE,
main.title.position = "center",
inner.margins = c(0, 0, 0, 0)
)
tmap_mode("plot")
tmap_save(carte, filename = "Taux de mortalité de la mère dans le monde.png")
tmap_mode("view")
tmap_save(carte, filename = "Taux de mortalité de la mère dans le monde.html")