install.packages(c('sf', 'mapsf'))
Faire des cartes thématiques avec R
GEO UNIV’R Tunisie 2024
Ce support est très largement inspiré du manuel Cartographie avec R
réalisé par Timothée Giraud et Hugues Pécout. Et on les en remercie chaleureusement 🙏
Pakages utilisés dans cette session.
Les principaux packages utilisés dans cette section sont :
sf
mapsf
Initiez un nouveau projet
- Créez un nouveau répertoire de travail.
- Ouvrez Rstudio.
- Créez un nouveau projet et placez-le dans votre dossier.
- Créez un nouveau document Quarto (ou éventuellement un simple script R si vous préférez)
Si vous n’avez pas les packages listés plus haut, vous pouvez les installer en tapant la ligne suivante dans la console.
Dans cette séquence, nous travaillons à l’échelle des pays africains. Les données statistiques sont issues de la base de données de la banque mondiale.
Télécharger le jeu de données
Téléchargez-le dossier Africa.zip, dézippez-le et placez-les données dans un répertoire data.
Tout est prêt 😎
Import et mise en forme des données
1 - Import des géométries
library("sf")
On dispose d’un fichier geopackage contenant plusieurs géométries
st_layers("data/Africa/afrique.gpkg")
Driver: GPKG
Available layers:
layer_name geometry_type features fields crs_name
1 ne_10m_populated_places Point 1305 137 WGS 84
2 ne_10m_roads Multi Line String 6761 31 WGS 84
3 ne_10m_railroads Multi Line String 758 12 WGS 84
4 africa Polygon 55 4 WGS 84
5 world Polygon 209 4 WGS 84
On importe la couche correspondant aux pays africains et on la reprojette en projection Pseudo-Mercator.
<- st_transform(st_read("data/Africa/afrique.gpkg", layer = "africa"),"epsg:3857") geom
Simple feature collection with 4 features and 4 fields
Geometry type: MULTIPOLYGON
Dimension: XY
Bounding box: xmin: -2702989 ymin: -2329942 xmax: 6434678 ymax: 1782119
Projected CRS: WGS 84 / Pseudo-Mercator
ISO3 NAMEen NAMEfr region
1 GNQ Equatorial Guinea Guinée-Équatoriale Africa
2 COM Comoros Comores Africa
3 CPV Cape Verde Cap-Vert Africa
4 MUS Mauritius Maurice Africa
geom
1 MULTIPOLYGON (((1260368 241...
2 MULTIPOLYGON (((4883099 -13...
3 MULTIPOLYGON (((-2660139 17...
4 MULTIPOLYGON (((6424679 -22...
2 - Import des données statistiques issues de la banque mondiale.
<- read.csv("data/Africa/worldbank_africa.csv") data
id type description
1 region quali subregion
2 pop stock Population, total
3 urb stock Urban population
4 rural stock Rural population
5 ruralpct ratio Rural population (% of total population)
6 gdp stock GDP (current US$)
7 gdppc ratio GDP per capita (current US$)
8 esp ratio Life expectancy at birth, total (years)
9 elec ratio Access to electricity (% of population)
10 forest stock Forest area (sq. km)
11 forestpct ratio Forest area (% of land area)
12 articles stock Scientific and technical journal articles
13 internet ratio Individuals using the Internet (% of population)
14 servers ratio Secure Internet servers (per 1 million people)
3 - Jointure
<- merge(
africa x = geom[,"ISO3"],
y = data,
by.x = "ISO3",
by.y = "id",
all.x = TRUE
)
On dispose maintenant du Spatial*DataFrame africa
qui contient à la fois des données et des géométries.
Et on ajoute quelques couches additionnelles
<- st_transform(st_read("data/Africa/afrique.gpkg", layer = "world"),"epsg:3857")
world <- st_transform(st_read("data/Africa/afrique.gpkg", layer = "ne_10m_populated_places"),"epsg:3857")
places <- st_transform(st_read("data/Africa/afrique.gpkg", layer = "ne_10m_railroads"),"epsg:3857")
rail <- st_transform(st_read("data/Africa/afrique.gpkg", layer = "ne_10m_roads"),"epsg:3857") roads
1 - cartographie avec sf
Grâce au package sf
, la fonction plot()
est étendue et permet l’afficher d’un Spatial*DataFrame comme n’importe quel graphique.
Comportement par défaut
Par de faut, la fonction renvoie une image pouvant contenir jusqu’à 10 cartes, chaque carte correspondant à une colonne.
plot(africa)
Si il y a plus de 10 colonnes dans le jeu de données, alors on ajoute la paramètre max.plot = ncol(africa) - 1
(le nombre de colonnes total moins la colonne de géométries).
plot(africa, max.plot = ncol(africa) - 1)
On perçoit que les couleurs ne sont pas choisies totalement au hasard. Nous verrons un peu plus tard comme cela fonctionne.
Si on souhaite afficher simplement les géométries, on utilise la fonction st_geometry()
plot(st_geometry(africa))
Marges en emprise
Dans les affichages précédents, on constate qu’il y a beaucoup d’espace perdu autour de la carte. On peut modifier les marges en modifiant les paramètres graphiques. mar
permet de mettre les marges à zéro. xaxs='i'
, yaxs='i'
permettent de supprimer les espaces résiduels.
par(mar = c(0, 0, 0, 0), xaxs='i', yaxs='i', bg = "#F1F3F5") # c(bottom, left, top, right))
plot(st_geometry(africa))
Quand on travaille dans un document quarto, il est également possible de modifier la taille des figures avec les paramètres fig-height
et fig-width
. Soit dans le yaml en haut du document. Soit directement dans le chunk.
Ici, on détermine le bon ratio entre la hauteur et la largeur.
<- st_bbox(africa)
bb <- (bb$xmax - bb$xmin) / (bb$ymax - bb$ymin)
ratio <- 6
height <- height * ratio
width width
xmax
6.355375
Puis on écrit
#| fig-height: 6
#| fig-width: 6.36
Et on obtient une carte qui prend bien tout l’espace souhaité.
par(mar = c(0, 0, 0, 0), bg = "#F1F3F5", xaxs='i', yaxs='i')
plot(st_geometry(africa))
Enfin, notez qu’avec xlim
et ylim
, vous pouvez cadrer la carte sur une emprise particulière. Par exemple ici, on affiche le fond de carte du monde mais uniquement avec l’emprise de l’Afrique.
par(mar = c(0, 0, 0, 0), xaxs='i', yaxs='i')
<- st_bbox(africa)
bb plot(st_geometry(world), xlim = c(bb$xmin, bb$xmax), ylim = c(bb$ymin, bb$ymax))
Paramétrer le style
De nombreux paramètres permettent de personnaliser le style de la carte. Nous en citons ici quelques exemples.
- Couleur de fond :
col
- Couleur de contour :
border
- Epaisseur des tracés :
lwd
par(mar = c(0, 0, 0, 0), bg = "#F1F3F5", xaxs='i', yaxs='i')
plot(st_geometry(africa), col = "#5b89a3", border = "white", lwd = 0.5)
NB : Il y a 657 noms de couleurs disponibles dans R. Pour les afficher, vous pouvez taper colors()
<- colors()
cols head(cols, 20)
[1] "white" "aliceblue" "antiquewhite" "antiquewhite1"
[5] "antiquewhite2" "antiquewhite3" "antiquewhite4" "aquamarine"
[9] "aquamarine1" "aquamarine2" "aquamarine3" "aquamarine4"
[13] "azure" "azure1" "azure2" "azure3"
[17] "azure4" "beige" "bisque" "bisque1"
Avec lty
, on peut également changer le type de traits
par(mar = c(0, 0, 0, 0), bg = "#F1F3F5", xaxs='i', yaxs='i')
plot(st_geometry(roads), lty = 3)
Avec pch
, on peut choisir le s de symbole. Avec cex
, on détermine sa taille.
par(mar = c(0, 0, 0, 0), bg = "#F1F3F5", xaxs='i', yaxs='i')
plot(st_geometry(places), pch = 17, col = "red", cex = 1)
Supperposer des couches
Pour superposer des couches, vous pouvez simplement utiliser le paramètre add = TRUE
(sous réserve que les couches soient dans le même système de coordonnées)
par(mar = c(0, 0, 0, 0), bg = "#F1F3F5")
plot(st_geometry(africa), col = "#5b89a3", border = "white", lwd = 0.5)
plot(st_geometry(roads), col = "red", add = TRUE)
plot(st_geometry(places), pch = 19, col = 'black', cex = 0.5, add = TRUE)
Autres éléments
Il est possible d’ajouter d’autres éléments à la mise en page.
- Les axes :
axes = TRUE/FALSE
- Graticule :
graticule = TRUE
- Titre =
main = "Hello"
Par exemple :
par(mar = c(0, 0, 2, 0))
plot(st_geometry(africa), col= "white", axes = TRUE, graticule = TRUE, main = "Hello")
Effet d’ombrage
Avec R, il est aisé de translater une géométrie pour créer un effet d’ombrage.
par(mar = c(0, 0, 0, 0))
plot(st_geometry(africa) + c(50000,-50000), col = "#827e6c80", border = NA)
plot(st_geometry(africa) , col = "#5B89A3", border = NA, add = TRUE)
On peut faire varier la transparence d’une couleur au format hexadécimal en ajouter un nombre de 00 à 99 à la fin du code. Par exemple #827e6c60
applique une opacité de 60% à la couleur #827e6c
.
On peut même imaginer cet ombrage en dégardé avec une boucle
<- 20000
delta <- 15
nb par(mar = c(0, 0, 0, 0))
plot(st_geometry(africa) , col = NA, border = NA)
for (i in 1:nb) {
plot(st_geometry(africa) + c(i * delta,-i * delta), col = "#827e6c20", border = NA, add = TRUE)
}plot(st_geometry(africa) , col = "#5B89A3", border = NA, add = TRUE)
Cartographie thématique
Avec le package sf
, il est (un peu) possible de réaliser des cartes thématiques. Rappelez-vous les couleurs de tout à l’heure. Dans le cas où un seul attribut est sélectionné, une légende est attribuée par défaut à côté de la carte. Ici, une donnée qualitative.
plot(africa["region"])
Le positionnement de la légende peut être défini par le paramètre key.pos
(1 = dessous, 2 = gauche, 3 = dessus et 4 = droite). Sa taille peut également être modifiée avec les paramètres key.width
et key.length
plot(africa["region"], key.pos = 1, key.length = 1)
Si on souhaite cartographier une variable quantitative, la palette par défaut est différente.
plot(africa["pop"])
Grace au paramètre breaks
, il est possible de donner ses propres classes de valeur ou de donner une méthode de discrétisation (méthodes du package classInt
).
plot(africa["pop"], breaks = "jenks")
Exports
Ici, on a affiché toutes les cartes dans le document. Mais on peut également choisir de les construire dans un format donné (pdf, svg, png, ps, etc.), ce qui peut être utile pour les retravailler dans un logiciel de DAO. Par exemple, on peut écrire :
svg("my_plot.svg")
plot(st_geometry(africa))
dev.off()
Bilan et limites
Les fonctions de cartographies dans les fonctionnalités de base de sf
sont très limitées. On ne peut pas, par exemple, dessiner des symboles proportionnels et leur légende associée. Si on veut aller plus loin, on a besoin d’un package spécialisé en représentations cartographiques. C’est à ce besoin que répond le package mapsf
.
2 - le package mapsf
mapsf
permet de créer la plupart des types de carte utilisés habituellement en cartographie statistique (cartes choroplèthes, typologies, symboles proportionnels ou gradués…).
Pour chaque type de carte, plusieurs paramètres permettent de personnaliser la représentation cartographique. Ces paramètres sont les mêmes que ceux que l’on retrouve dans les logiciels de SIG ou de cartographie usuels. mapsf
est le successeur du package cartography
. Si vous avez l’habitude d’utiliser ce dernier, nous vous conseillons vivement d’utiliser dorénavant mapsf
.
On charge le package
library("mapsf")
Documentation et supports
De nombreux documents permettent de prendre en main ce package.
- Le site web
- La feuille de triche
- Le manuel cartographie avec R
Et surtout, il faut aller voir dans la documentation du package directement dans RStudio. Vous y découvrirez une magnifique vignette.
Afficher un fond de carte
La fonction mf_map()
est la fonction centrale du package mapsf
. Elle remplace la fonction plot. Elle permet de réaliser la plupart des représentations usuelles en cartographie. Par défaut, elle permet d’afficher un fond de carte.
mf_map(africa)
La fonction mf_title()
permet d’ajouter un titre à la place de main. Avec add = TRUE
, on peut supproposer des couches.
En affichant une première couche avec border = NA
et col = NA
, on peut ajouter un calque vide pour fixer l’emprise de la carte
mf_map(x = africa, border = NA, col = NA)
mf_map(x = world, border = "white", col = "#CCCCCC50", lwd = 0.5, add = TRUE)
mf_map(x = africa, border = "white", col = "#6893d9", lwd = 0.5, add = TRUE)
mf_map(x = places, pch = 20, cex = .7, col = "darkred", add = TRUE)
mf_title(txt = "L'Afrique")
Pour déterminer la taille de la figure, vous pouvez utiliser la fonction mf_get_ratio()
Symboles proportionnels
Pour représenter une donnée quantitative absolue (i.e. donnée de stock), on utilise la fonction mf_map
avec le paramètre type = "prop"
mf_map(x = africa, border = "white", lwd = 0.5)
mf_map(x = africa,
var = "pop",
type = "prop",
border = "white",
col = "#FF000080",
leg_title = "Nombre d'habitants\nen 2020",
inches = 0.4 # taille du plus grand symbole
)mf_title(txt = "Population totale")
Pour dessiner des carrés au lieu des cercles, vous pouvez utiliser symbol = "square"
Symboles gradués
Avec le type "grad"
, vous pouvez réaliser la même carte avec des symboles gradués (ce qui dans le cas de figure ici, est moins efficace). Pour cela, vous devez choisir un nombre de classes (nbreaks
) et une méthode de discrétisation (breaks
).
mf_map(x = africa, border = "white", lwd = 0.5)
mf_map(x = africa,
var = "pop",
type = "grad",
nbreaks = 5,
method = "quantile",
border = "white",
col = "#FF000080",
leg_title = "Nombre d'habitants\nen 2020",
inches = 0.4)
mf_title(txt = "Population totale (classes de tailles)")
Carte choroplèthe
Pour représenter des données quantitatives relatives (ratio, indices, échelles…), on utilisera la plupart du temps des dégradés de couleurs. Dans mapsf
, cela s’effectue avec le type "choro"
. Comme précédemment, les paramètres nbreaks
et breaks
permettent de paramétrer les discrétisations.
mf_map(x = africa,
var = "gdppc",
type = "choro",
nbreaks = 5,
border = "white",
leg_title = "PIB par habitant\n(US$ courants)")
mf_title(txt = "Richesse des pays d'Anfrique en 2020")
Par défaut, la méthode de discrétisation est la méthode des quantiles. Elle s’adapte donc à n’importe quelle distribution de données. Mais avant de réaliser une carte choroplèthe, il est préférable d’étudier d’abord la distribution statistique de la variable que l’on souhaite cartographier. La fonction mf_distr()
permet de visualiser cette distributions.
mf_distr(africa$gdppc)
Ici, la série est dissymétrique à gauche, on peut donc opter plutôt pour la méthode "geom"
qui est adaptée à ce type de distribution (les méthodes disponibles sont : "fixed"
, "sd"
, "equal"
, "pretty"
, "quantile"
, "kmeans"
, "hclust"
, "bclust"
, "fisher"
, "jenks"
, "dpih"
, "q6"
, "geom"
, "arith"
, "em"
ou "msd"
).
mf_map(x = africa,
var = "gdppc",
type = "choro",
breaks = "geom",
nbreaks = 4,
border = "white",
leg_title = "PIB par habitant\n(US$ courants)")
mf_title(txt = "Richesse des pays d'Afrique en 2020 (method = 'geom')")
Pour changer les couleurs, vous pouvez renseigner une palette de couleur avec l’argument pal
. Par exemple :
= "Magenta" pal
Si vous le souhaitez, vous pouvez aussi choisir vos propres couleurs.
= c("#F3CAD2", "#E08BB1", "#AF4F91", "#6D1C68") pal
Ou créer une palette sur mesure avec la fonction mf_get_pal()
.
= mf_get_pal(n = c(6,3), palette = c("Burg", "Teal")) pal
Carte de typologie
Pour cartographier des données qualitatives, on utilise type = "typo"
.
mf_map(x = africa,
var = "region",
type = "typo",
breaks = "geom",
border = "white")
mf_title(txt = "Les grandes régions d'Afrique")
L’argument val_order
sert à ordonner les modalités dans la légende. Par exemple :
= c("Northern Africa", "Eastern Africa", "Western Africa", "Middle Africa", "Southern Africa") val_order
Combinaisons
Pour réaliser des cartes combinant deux variables, il est possible de superposer une carte choroplèthe et une carte de stock. Par exemple :
mf_map(x = africa,
var = "gdppc",
type = "choro",
nbreaks = 5,
border = "white",
leg_pos = "topleft",
leg_title = "PIB par habitant\n(US$ courants)")
mf_map(x = africa,
var = "pop",
type = "prop",
border = "black",
leg_pos = "bottomleft",
col = NA,
leg_title = "Nombre d'habitants\nen 2020",
inches = 0.4)
mf_title(txt = "Population et richesse en Afrique")
Mais vous pouvez aussi utiliser le types "prop_choro"
et "prop_typo"
.
Dans ce cas, les choses se présentent comme ceci :
mf_map(x = africa, border = "white", lwd = 0.5)
mf_map(x = africa,
var = c("pop","gdppc"),
type = "prop_choro",
nbreaks = 5,
border = "white",
leg_pos = c("bottomleft","topleft"),
leg_title = c("Nombre d'habitants\nen 2020", "PIB par habitant\n(US$ courants)"),
inches = 0.4)
Ou bien :
mf_map(x = africa, border = "white", lwd = 0.5)
mf_map(x = africa,
var = c("pop","region"),
type = "prop_typo",
nbreaks = 5,
border = "white",
leg_pos = c("bottomleft","topleft"),
leg_title = c("Nombre d'habitants\nen 2020", "Régions d'appartenance"),
inches = 0.4)
Elements d’habillage
La package mapsf
pemet d’ajouter plusieurs éléments d’habillage.
mf_title()
permet d’ajouter un titremf_credits()
permet d’afficher la sourcemf_scale()
ajoute une échellemf_arrow()
ajoute une orientation.
mf_map(x = africa, border = "white", lwd = 0.5)
mf_title(txt = "Population totale")
mf_credits(txt = "Source : Banque mondiale, 2024")
mf_scale()
mf_arrow()
Tous ces éléments sont personnalisables.
mf_map(x = africa, border = "white", lwd = 0.5)
mf_title(txt = "Population totale", pos = "center", tab = FALSE, bg = "#6888ba")
mf_credits(txt = "Source : Banque mondiale, 2024", pos = "bottomright", cex = 1)
mf_scale(col = "red", scale_units = "mi", pos = "bottomleft")
mf_arrow(pos = "topright")
Tous ces éléments peuvent être regroupés dans la fonction mf_layout()
mf_layout(
title = "L'AfRique",
credits = "Banque mondiale, 2024",
arrow = TRUE,
scale = TRUE
)
Avec mf_shadow()
vous pouvez également ajouter un ombrage.
Avec mf_graticule()
, des lignes de latitude et longitude avec de belles annotations.
mf_shadow(x = africa, col = "grey50", cex = 1)
mf_graticule(
x = africa,
col = "coral4",
lwd = 2,
lty = 2,
expandBB = c(.1, 0, 0, .1),
label = TRUE,
pos = c("right", "bottom"),
cex = .8,
add = TRUE
)mf_map(x = africa, border = "white", lwd = 0.5, add= TRUE)
Textes et étiquettes
Vous pouvez ajouter des etiquettes avec la fonction mf_label()
mf_map(x = africa, border = "white", lwd = 0.5)
mf_label( x = africa,
var = "name",
col= "black",
halo = TRUE,
overlap = FALSE,
lines = TRUE)
Et une simple étiquette avec mf_annotation()
mf_map(x = africa, border = "white", lwd = 0.5)
mf_annotation(
x = africa[africa$ISO3 == "TUN", ],
txt = "Tunisie",
halo = TRUE,
cex = 1.5,
pos = "bottomleft"
)
Les thèmes
Une série de thèmes prédéfinis est disponible : "default"
, "brutal"
, "ink"
, "dark"
, "agolalight"
, "candy"
, "darkula"
, "iceberg"
, "green"
, "nevermind"
, "jsk"
, "barcelona"
.
Par exemple :
mf_theme("nevermind")
mf_map(x = africa)
mf_title(txt = "Le thème nevermind")
Le système de thèmes est très flexible. Vous pouvez prendre un thème et le modifier.
mf_theme("nevermind", tab = TRUE, bg = "green")
mf_map(x = africa)
mf_title(txt = "Le thème nevermind modifié")
Planches cartographiques
Avec R, il est aisé de construire des figures contenant plusieurs graphiques, grâce à l’argument mfrow
de la fonction par()
.
mf_theme("default")
<- par(mfrow = c(1, 2))
opar
mf_map(x = africa,
var = "gdppc",
type = "choro",
border = "white",
leg_title = "PIB par habitant\n(US$ courants)",
inches = 0.4)
mf_map(x = africa,
var = "elec",
type = "choro",
nbreaks = 4,
border = "white",
pal = "Magenta",
leg_title = "Accès à l'électricité\n(% de la pop)",
inches = 0.4)
par(opar)
Cartons
La fonction mf_inset_on()
permet de démarrer la création d’un carton. Il faut ensuite “refermer” le carton avec mf_inset_off()
.
# Carte principale
mf_map(africa)
# Petite carte
<- africa[africa$ISO3 == "TUN", ]
tun mf_inset_on(x = tun, pos = "topright", cex = .1)
mf_map(tun, col = "#e69749", border = "white")
mf_scale(pos = "bottomright")
box()
mf_inset_off()
# Fin de la petite carte
mf_title("Afrique et Tunisie")
Exportez une carte
Enfin, la fonction mf_export()
vous permet d’exporter vos cartes dans différents formats.
mf_export(africa, filename = "macarte.svg")
mf_map(africa, add = TRUE)
dev.off()
quartz_off_screen
2
A vous de jouer
Réalisez une carte sur un indicateur de votre choix. Si besoin, vous pouvez aller chercher d’autres indicateurs grâce au package wbstats
Si vous ne l’avez pas déjà installé, tapez ceci dans la console.
install.packages('wbstats')
library(wbstats)
Par exemple
wb_search(pattern = "Bird")
# A tibble: 2 × 3
indicator_id indicator indicator_desc
<chr> <chr> <chr>
1 EN.ANM.THRD.NO Animal species, threatened Animal species are mammals (excludi…
2 EN.BIR.THRD.NO Bird species, threatened Birds are listed for countries incl…
<- wb_data("EN.BIR.THRD.NO", start_date = 2018, end_date = 2018)
oiseaux_menaces head(oiseaux_menaces)
# A tibble: 6 × 9
iso2c iso3c country date EN.BIR.THRD.NO unit obs_status footnote
<chr> <chr> <chr> <dbl> <dbl> <chr> <chr> <chr>
1 AW ABW Aruba 2018 2 <NA> <NA> <NA>
2 AF AFG Afghanistan 2018 16 <NA> <NA> <NA>
3 AO AGO Angola 2018 32 <NA> <NA> <NA>
4 AL ALB Albania 2018 8 <NA> <NA> <NA>
5 AD AND Andorra 2018 3 <NA> <NA> <NA>
6 AE ARE United Arab Emirat… 2018 13 <NA> <NA> <NA>
# ℹ 1 more variable: last_updated <date>
<- merge(
africa_birds x = geom[,"ISO3"],
y = oiseaux_menaces,
by.x = "ISO3",
by.y = "iso3c",
all.x = TRUE
)
mf_map(x = africa, border = NA, col = NA)
mf_map(x = world, border = "white", col = "#CCCCCC50", lwd = 0.5, add = TRUE)
mf_map(x = africa, border = "white", col = "#6893d9", lwd = 0.5, add = TRUE)
mf_map(x = africa_birds,
var = "EN.BIR.THRD.NO",
type = "prop",
symbol = "square",
border = "white",
col = "#FF000080",
leg_title = "Nombre d'oiseaux\nmenacés en 2018",
inches = 0.3)
3 - Cartogrammes
Il existe plusieurs méthodes pour réaliser des cartogrammes. Un certain nombre d’entre elles sont disponibles dans le package cartogram
. Vous pouvez l’installer en tapant l’instruction suivante dans le console.
install.packages('cartogram')
Cartogrammes de Dorling
#library(mapsf)
library(cartogram)
<- cartogram_dorling(
pop2020_dorling !is.na(africa$pop),],
africa[weight = "pop",
k=2.5
)
mf_map(africa, col = "white", border= NA)
mf_map(pop2020_dorling, col = "#5B89A3", border= "white", add = TRUE)
mf_label(
x = pop2020_dorling[order(pop2020_dorling$pop, decreasing = TRUE), ][1:10,],
var = "name",
col = "#5B89A3",
overlap = FALSE, lines = FALSE,
halo = TRUE,
r = .15
)mf_title("Population totale - Cartogramme de Dorling")
Les cartogrammes non continus
<- cartogram_ncont(x = africa, weight = "pop", k = 1.2)
afr_ncont mf_map(africa, border = "white", lwd = 0.5,)
mf_map(afr_ncont, col = "#5B89A3", border= "white", add = TRUE)
mf_title("Population en Afrique - Cartogramme de Olson")
Cartogrammes continus
is.na(africa$pop),"pop"] <- 1
africa[<- cartogram_cont(x = africa,
afr_cont weight = "pop",
itermax = 30)
mf_map(afr_cont, col = "#5B89A3", border= "white", add = FALSE)
mf_title("Population en Afrique - Cartogramme de Dougenik")
mf_inset_on(africa, cex = .2, pos = "topleft")
mf_map(africa, lwd = .5, border = "white")
mf_inset_off()
Aller plus loin
Pour en savoir plus sur les différentes formes de cartogrammes, vous pouvez aussi consulter ce document réalisé en 2021 : transcarto.github.io/rcartograms/TRANSCARTO_cartograms.html
4 - Cartographie Interactive
Le langage R permet d’embarquer des librairies en JavaScript dans des packages. Cela ouvre la possibilité de réaliser des proposer des outils de cartographie interactive. Ici, nous parlerons de 2 exemples principaux.
mapview
Le package mapview
permet de créer rapidement et facilement des visualisations interactives de données spatiales avec ou sans fond de carte. Le package s’installe de la façon suivante :
install.packages('mapview')
library(sf)
library(mapview)
mapview(africa) + mapview(st_centroid(africa))
Leaflet
Leaflet est un package basé sur le JavaScript, permettant de faire de la cartographie interactive. On l’installe de la façon suivante :
install.packages('leaflet')
library(leaflet)
Réalisation d’une première carte simple
= leaflet() %>% addTiles()
m m
Zoom sur une localisation précise.
<- c(10.760034694759957, 34.7407779744004)
sfax <- leaflet() %>% setView(lng = sfax[1], lat = sfax[2], zoom = 12) %>%
m2 addTiles()
m2
Ajout de géométries
<- st_transform(africa, 4326)
africa_wgs84 <- paste0("<b>",africa_wgs84$name,"</b><br/><b>Population: </b>",
popup $pop)
africa_wgs84= leaflet() %>%
m3 addTiles() %>%
addPolygons(data=africa_wgs84, weight = 2, fillColor = "yellow", popup= popup) %>%
addMarkers(data = st_centroid(africa_wgs84)) %>% addMiniMap(position = "bottomright")
Warning: st_centroid assumes attributes are constant over geometries
m3
Au delà de R
Avec Quarto et Observable JavaScript, il est également possible de créer des cartes thématiques interactives dans Rstudio.