En lisant cet article de Yann Guégan évoquant le monde selon Bernard Guetta je me suis dis: “Tiens, et si je faisais une petite carte interactive avec des cercles proportionnels en utilisant les mêmes données!”.
Le journaliste explique sa méthodologie et présente tous les outils qu’il a mobilisé dans un deuxième article. Les données (en tout cas une partie) sont également diffusées dans format libre. Cette démarche ouverte permet de reproduire les analyses, les figures etc. Bref c’est du bon boulot!
Cartographie interactive
Pour réaliser cette carte, avec R bien sur, j’ai choisi d’utiliser le package leaflet
. Ce package, disponible sur github, est construit en utilisant le package htmlwidgets
et s’appuie sur la librairie javascript leaflet.
Le code
# Téléchargement des données
guetta <- url(description = "http://dansmonlabo.com/files/pays_v3.csv")
ctry <- read.csv(guetta)
# Téléchargement du fond de carte
worldmap <- url('http://wukan.ums-riate.fr/bernardguetto/world.RData')
load(worldmap)
# Nettoyage des données
## Sélection de certaines colonnes
ctry <- ctry[,c("code_pays_iso_a3","count", "PIB_2013_1000_no_blank",
"geo_longitude", "geo_latitude" )]
## Correction de la localisation du Vietnam
ctry[ctry$code_pays_iso_a3 == "VNM",
c("geo_longitude", "geo_latitude")] <- c(107.8455,12.79458)
## Jointure avec le fond de carte pour obtenir les nom de pays
ctry <- merge(ctry, world@data[,c(2:3)],
by.x = "code_pays_iso_a3", by.y = "ISO3", all.x = T)
## Suppression des lignes non renseignées
ctry <- ctry[!is.na(ctry$geo_longitude),]
## Sélection des pays cités plus d'une fois
ctry <- ctry[ctry$count > 1,]
# Préparation des données
## Tri du data frame de manière à avoir les cercles plus gros en dessous.
ctry <- ctry[order(ctry$count, decreasing = T),]
## Taille des rayons des cercles à afficher (en pixels)
ctry$size <- sqrt(ctry$count*4 / pi)
## Label des cercles (ce qui apparait quand on click dessus)
ctry$label <- paste("<b>", ctry$name, "</b> <br>Pays cité dans ",
ctry$count, "chroniques.")
# Construction de la carte
library(leaflet)
## Initialisation
m <- leaflet(padding = 0)
## Ajout des pays
m <- addPolygons(map = m, data = world, opacity = 100,
color = "#FAFCFA",
weight = 0.25,popup = NULL,
options = list(clickable = FALSE),
fill = T, fillColor = "#B3C4B3",
fillOpacity = 100)
## Ajout des cercles
m <- addCircleMarkers(map = m,
lng = ctry$geo_longitude,
lat = ctry$geo_latitude,
radius = ctry$size, weight = 0.25,
stroke = T, opacity = 100,
fill = T, fillColor = "#920000",
fillOpacity = 100,
popup = ctry$label,
color = "white")
## Centrage de la carte
m <- fitBounds(map = m,
lng1 = min(ctry$geo_longitude),
lat1 = min(ctry$geo_latitude),
lng2 = max(ctry$geo_longitude),
lat2 = max(ctry$geo_latitude))
## Dimensions de la carte
m$width <- 474
m$height <- 200
# Export de la carte en html
library(htmlwidgets)
saveWidget(m, 'map.html', selfcontained = TRUE)
Le résultat
Il est possible de zoomer et de se déplacer sur la carte, les cercles sont cliquables.
La carte est stockée dans un fichier html sur un serveur et incluse dans le post via un iframe
.
Cliquer ici pour accéder à une version plus grande de la carte.
Quelques remarques
Le package leaflet
est assez facile d’utilisation, même sans utiliser la syntaxe pipe à la mode (%>%
).
Quelques problèmes subsistent :
– il n’est pas prévu de pouvoir rajouter une légende pour les cercles proportionnels;
– il n’est pas possible de changer la projection du fond de carte (comme il est possible de le faire avec le plugin Proj4Leaflet
de la librairie javascript).
Merci à Yann Guégan pour le partage de ses données, de ses méthodos ainsi que pour sa réactivité (et l’inspiration pour l’image d’illustration :-)).
OpenEdition vous propose de citer ce billet de la manière suivante :
Timothée Giraud (18 mai 2015). Création d’une carte interactive avec leaflet. R Géomatique. Consulté le 7 septembre 2024 à l’adresse https://doi.org/10.58079/tp3f
Bonjour,
Parmi les logiciels utilisés par Yann Guégan, il signale l’outil lexicométrique TMX. Ayant voulu en savoir plus, il est indiqué (entre autres) que :
“L’expert peut utiliser les raccourcis clavier et surtout les possibilités de pilotage par scripts écrits dans des langages de programmation dynamique : […]
– en langage R pour accéder à tous les packages R installés et aux objets créés par TXM (corpus, listes de mots…)”.
Encore R : l’outil à tout faire, décidément…
Fr. Stévenot