Chapitre 10 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 enchainer 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 un format de données 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
library(tmap)
library(sf)
library(tidyverse)
#remotes::install_github("MaelTheuliere/variousdata")
library(variousdata)
data("World")
10.1 tm_shape
Pour charger une donnée géométrique, il faut utiliser la fonction tm_shape()
. tm_shape()
permet de fixer plusieurs options de base de notre carte : la projection, la bbox, un facteur de simplification…
mercator <- tm_shape(World, projection = st_crs(3395)) +
tm_polygons() +
tm_layout("Le monde en projection Mercator", inner.margins=c(0,0,.1,0), title.size=.8)
robin <- tm_shape(World, projection = "+proj=robin +lon_0=0 +x_0=0 +y_0=0") +
tm_polygons() +
tm_layout(
"Le monde en projection Robinson",
inner.margins=c(0,0,.1,0), title.size=.8)
10.2 Exemple de carte choroplèthe
La fonction tm_polygons()
permet de faire des cartes choroplèthe.
10.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ère des pays avec une couleur de remplissage par défaut.
10.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.
10.5 Exemples de cartes avec facet
tm_facets()
permet de réaliser des cartes à facette avec la même logique que celle de ggplot2
.
10.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 = F)
On peut également utiliser n’importe qu’elle palette, par exemple la pelette viridis, mais sans l’interface proposée par palette_explorer()
:
10.7 La mise en page
tm_layout()
permet de controler les polices, la légende, les marges, les couleurs.
l’option design.mode=T
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 = F,
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 = F,
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"))
10.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.
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 = F)
tmap_arrange(tmap_sdg_indicators,tmap_sdg_indicators_africa,nrow = 1)
10.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()
10.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 = F,
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")```