
Lorsqu’on analyse des données, il est courant de devoir positionner sur une carte géographique des emplacements tels que des points de prélèvement, des parcelles agricoles ou des sites de production, par exemple.
Utiliser R pour réaliser des cartes et positionner des emplacements présente plusieurs avantages. Tout d’abord, cela permet d’intégrer cette tache dans son flux de travail, et de ne pas utiliser un autre logiciel, ce qui réduit les risques d’erreurs et économise du temps. Ensuite, cela permet d’avoir accès à des packages performants pour la manipulation des données spatiales, comme le package sf. Cela permet encore d’employer ggplot2 pour dessiner ses cartes et les personnaliser facilement (couleur, titre, légende). Enfin, R permet de traiter de grands volumes de données.
Dans ce tutoriel, je vais vous montrer en pas à pas, comment créer des cartes géographiques et positionner facilement des lieux dessus.
La méthode que je vous propose dans cet article est très simple, elle consiste à :
geodatasf afin de le rendre très facilement manipulable
Dans ce tutoriel, nous allons réaliser une carte de France et ajouter quelques sites dessus.
Les fonds de carte peuvent être importés dans R, depuis le projet GADM (Global Administrative Areas), par l’intermédiaire du package geodata et sa fonction gadm.
Le projet GADM est une initiative qui vise à représenter les limites administratives des pays du monde entier. C’est une base de données spatiale de grande précision qui couvre tous les pays et contient les niveaux d’administration, avec des noms et des codes de localités pour chaque niveau.
Les pays doivent être indiqués, dans l’argument country par leur code ISO (vous pourrez les trouver ici : https://documentation.abes.fr/sudoc/formats/CodesPays.html) L’argument level correspond aux différentes divisions administratives d’un pays. Pour la France :
level=0 : le pays lui-même (par exemple la France).level=1 : régions administratives (par exemple, Île-de-France, + Nouvelle-Aquitaine, etc.).level=2 : départements (par exemple, Paris, Gironde, Rhône, etc.).level=3 : arrondissements ou subdivisions similaires.
Notez que le niveau exact des divisions peut varier selon les pays et que pour certains pays, il n’y a peut-être pas de données disponibles pour tous les niveaux.
library(geodata)
Fr <-gadm(country = "FR" , level=0, path=tempdir())
plot(Fr) 
Fr.reg <- gadm(country = "FR" , level=1, path=tempdir())
plot(Fr.reg) 
Fr.dep <- gadm(country = "FR" , level=2, path=tempdir())
plot(Fr.dep) 
Fr.arr <- gadm(country = "FR" , level=3, path=tempdir())
plot(Fr.arr) L’argument path=tempdir() spécifie l’emplacement où les données téléchargées seront temporairement stockées sur votre ordinateur. Plus précisément :
path est l’argument qui permet de définir le dossier de destination où les fichiers seront téléchargés et enregistrés.
tempdir() est une fonction de R qui renvoie un dossier temporaire propre à la session R en cours. Ce dossier est utilisé par R pour stocker temporairement des fichiers pendant une session, et son contenu est généralement effacé lorsque vous fermez R.
C’est utile si vous ne souhaitez pas conserver ces données après avoir terminé votre session R actuelle. Si vous souhaitez les conserver pour une utilisation ultérieure, vous devriez spécifier un autre chemin pour l’argument path.
Si vous regardez la classe de l’objet renvoyé par la fonction gadm() vous verrez qu’il s’agit de la classe SpatVector .
str(Fr.reg)
# S4 class 'SpatVector' [package "terra"] Ce type d’objet n’est pas facilement manipulable avec les packages dplyr et ggplot2 que nous allons employer pour dessiner la carte. C’est pour cette raison, qu’il est préférable de le transformer au préalable en objet sf :
Pour transformer une objet de classe SpatVector en classe sf, il est nécessaire d’employer la fonction st_as_sf() du package sf. Ce package c’est l’équivalent de dplyr pour les données spatiales.
library(sf)
Fr.reg <- st_as_sf(Fr.reg)
str(Fr.reg)
Classes 'sf' and 'data.frame': 13 obs. of 12 variables:
$ GID_1 : chr "FRA.1_1" "FRA.2_1" "FRA.3_1" "FRA.4_1" ...
$ GID_0 : chr "FRA" "FRA" "FRA" "FRA" ...
$ COUNTRY : chr "France" "France" "France" "France" ...
$ NAME_1 : chr "Auvergne-Rhône-Alpes" "Bourgogne-Franche-Comté" "Bretagne" "Centre-Val de Loire" ...
$ VARNAME_1: chr NA NA NA NA ...
$ NL_NAME_1: chr NA NA NA NA ...
$ TYPE_1 : chr "Région" "Région" "Région" "Région" ...
$ ENGTYPE_1: chr "Region" "Region" "Region" "Region" ...
$ CC_1 : chr NA NA NA NA ...
$ HASC_1 : chr "FR.AR" "FR.BF" "FR.BT" "FR.CN" ...
$ ISO_1 : chr NA NA "FR-BRE" "FR-CVL" ...
$ geometry :sfc_GEOMETRY of length 13; first list element: List of 2
..$ : num [1:2555, 1:2] 5.42 5.4 5.38 5.39 5.38 ...
..$ : num [1:39, 1:2] 4.98 4.99 4.99 5 5.01 ...
..- attr(*, "class")= chr [1:3] "XY" "POLYGON" "sfg"
- attr(*, "sf_column")= chr "geometry"
- attr(*, "agr")= Factor w/ 3 levels "constant","aggregate",..: NA NA NA NA NA NA NA NA NA NA ...
..- attr(*, "names")= chr [1:11] "GID_1" "GID_0" "COUNTRY" "NAME_1" ... L’objet de classe sf est assimilable à un data frame et est compatible avec tidyverse.Vous pouvez alors facilement visualiser les données dans R Studio :
View(Fr.reg) 
Cet objet est un data frame avec une variable supplémentaire, nommée geometry. Il s’agit de données spatiales vectorielles, ici de forme polygone ; elles correspondent aux coordonnées GPS du tracé des régions.
Pour tracer la carte avec ggplot2 il suffit d’utiliser une couche geom_sf(). L’argument fill=white permet que le fond de la carte soit en blanc.
library(ggplot2)
g1 <- ggplot(data =Fr.reg) +
geom_sf(fill="white") +
theme_classic()
g1 
g2 <-g1 +
theme_void() + #Supprimer les étiquette des coordonnées
ggtitle("Ma carte") + # ajouter un titre et personnalisation
theme(plot.title = element_text(hjust = 0.5,
size=12,
color="blue",
face="bold"))
g2 
Il est également possible d’ajouter une flèche nord avec la fonction annotation_north_arrow ou encore une échelle avec la fonction annotation_scale() , du package ggspatial:
library(ggspatial)
g3 <- g2 +
annotation_north_arrow(location = "bl", # bottom left
which_north = "true",
style = north_arrow_fancy_orienteering())+
annotation_scale(location = "br") # bottom right)
g3 
g4 <- g3 +
geom_sf(fill="lightyellow", colour="purple")
g4 
Les données spatiales (ici les valeurs de la variable geometry) sont définies dans un système de coordonnées de référence (CRS pour Coordinate Reference System en anglais).
Pour positionner des lieux sur la carte, nous allons devoir fournir leurs coordonnées en longitude (axe des x) et latitude (axe des y) dans le même système de référence.
Le CRS des données provenant du projet geodata est le système WGS 84 ; c’est également celui employé par le gps.
C’est donc plutôt facile de trouver les coordonnées d’un lieu, par exemple, en utilisant le site https://www.coordonnees-gps.fr/
Si nous entrons Briançon dans l’adresse, nous allons obtenir :
Nous allons positionner la ville de Briançon sur la carte, en utilisant un cercle plein (pch=19) de couleur rouge. Pour cela, nous allons employer une couche geom_point(), et spécifier les coordonnées récupérées précédemment, dans les arguments x et y.
Pour ajouter l’étiquette, nous employons la couche geom_text(), en spécifiant les mêmes coordonnées et en utilisant les arguments nudge_x et nudge_y pour la décaler légèrement à côté du cercle plein.
g5 <- g4 +
geom_point(x=6.6436313, y=44.8984037, pch=19, size=3, colour="red")+
geom_text(aes(x = 6.6436313, y = 44.8984037, label = "Briançon"), nudge_x = 0.2, nudge_y = 0.4)
g5 
Pour positionner plusieurs lieux, je vous recommande de créer en amont un data frame de 3 colonnes :
Comme cela, par exemple :
df <- data.frame(
ville = c("Paris", "Bordeaux", "Lyon", "Marseille"),
longitude = c(2.3522, -0.5792, 4.8357, 5.3698),
latitude = c(48.8566, 44.8378, 45.7640, 43.2965)
) Il ne reste plus qu’à dessiner la carte en ajoutant les lieux. Les positions des cercles pleins et des étiquettes sont spécifiées dans une fonction aes() des couches geom_point() geom_text() afin que les instructions soient appliquées à toutes les lignes (villes) du data frame.
ggplot(data = Fr.reg) +
geom_sf(fill="lightyellow", colour="purple") +
geom_point(data=df,
aes(x=longitude, y=latitude,colour=ville),
size=3)+
scale_colour_manual(values=c("orange", "blue", "magenta", "green3"))+
geom_text(data=df,
aes(x=longitude, y=latitude,colour=ville,
label = ville),
nudge_x = 0.2, nudge_y = 0.4)+
theme_void()+
theme(legend.position = "none")+
ggtitle("Mes sites")+
theme(plot.title = element_text(hjust = 0.5,
size=12,
color="blue",
face="bold"))+
annotation_north_arrow(location = "bl", # bottom left
which_north = "true",
style = north_arrow_fancy_orienteering())+
annotation_scale(location = "br") 
D’autres packages permettent de positionner des emplacements sur une carte géographique. Si le package ggplot2 ne vous donne pas entière satisfaction, vous pouvez aller jeter un coup d’eoeil du côté des packages tmap (https://cran.r-project.org/web/packages/tmap/vignettes/tmap-getstarted.html), ou encore mapsf (https://riatelab.github.io/mapsf/articles/mapsf.html).
Ce tutoriel visait à vous montrer les étapes nécessaires pour créer facilement une carte géographique avec ggplot2 et ajouter quelques lieux dessus.
Nous avons commencé par l’importation de fonds de carte grâce au package geodata. Ensuite, nous avons abordé la transformation des objets cartographiques en format sf. Cette transformation est cruciale car elle rend les données plus faciles à manipuler dans R. Nous avons encore récupéré les coordonnées géographiques des lieux que nous souhaitions positionner. Et enfin nous avons employé ggplot2 pour dessiner la carte et ajouter les lieux.
N’hésitez pas à laisser un commentaire pour partager votre opinion sur ce tutoriel, poser des questions ou discuter des difficultés que vous rencontrez. Cette interaction enrichit la communauté, et permet à tous de bénéficier de conseils pratiques et de solutions partagées ! 🙏 🫶
Retrouver le planning et les programmes de mes formations ici 👇👇👇
Retrouver mes propositions de services ici 👇👇👇
C’est possible en faisant un don sur la page Tipeee du blog

Enregistrez vous pour recevoir gratuitement mes fiches « aide mémoire » (ou cheat sheets) qui vous permettront de réaliser facilement les principales analyses biostatistiques avec le logiciel R et pour être informés des mises à jour du site.
10 réponses
Bonjour Claire
C’est vraiment génial et très gentil de ta part
Merci pour ce tuto Claire. <tu peux éventuellement y ajouter l'utilisation de la fonction map_data(), puis de la couche geom_map sur un ggplot ; ça permet de colorer par exemple plusieurs pays sur la carte du monde ou bien plusieurs département sur la carte de France.
Excellent.
Je vais l’essayer sur mon pays et vous faire un retour.
Merci Claire.
Wahou!!!!
Merci beaucoup Claire!!
Merci madame pour ce partage. Vous êtes 👌
Bonjour, merci pour le tuto, mais je me trompe ou le g3 il est passé à la trappe ?
Bonjour Jean,
C’est corrigé. Merci.
Merci pour ce tuto.
Bonjour Claire et merci pour le partage,
du coup, je me demande s’il est possible (probablement…) de faire apparaître sur la carte des « boules » de taille différentes et/ou de tonalité de couleur afin de décrire par exemple une densité de population ?
Tu expliques ça dans ta formation ?
Amicalement
Philippe
Bonjour Philippe,
Oui, c’est possible de faire ce type de carte, on les appelle les cartes de symboles proportionnels. Et oui je montre comment faire cela dans la formation.
Si tu veux prendre un peu d’avance, tu peux jeter un coup d’oeil au package mapsf.
A bientôt.