{"word_count": 505, "character_count": 4124}
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 interactivePour 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éesguetta &#60;- url(description = "http://dansmonlabo.com/files/pays_v3.csv")ctry &#60;- read.csv(guetta)# Téléchargement du fond de carteworldmap &#60;- url('http://wukan.ums-riate.fr/bernardguetto/world.RData')load(worldmap)# Nettoyage des données## Sélection de certaines colonnesctry &#60;- ctry[,c("code_pays_iso_a3","count", "PIB_2013_1000_no_blank",                "geo_longitude",  "geo_latitude" )]## Correction de la localisation du Vietnamctry[ctry$code_pays_iso_a3 == "VNM",      c("geo_longitude",  "geo_latitude")] &#60;- c(107.8455,12.79458)## Jointure avec le fond de carte pour obtenir les nom de paysctry &#60;- merge(ctry, world@data[,c(2:3)],               by.x = "code_pays_iso_a3", by.y = "ISO3", all.x = T)## Suppression des lignes non renseignéesctry &#60;- ctry[!is.na(ctry$geo_longitude),]## Sélection des pays cités plus d'une foisctry &#60;- ctry[ctry$count &#62; 1,]# Préparation des données ## Tri du data frame de manière à avoir les cercles plus gros en dessous.ctry &#60;- ctry[order(ctry$count, decreasing = T),]## Taille des rayons des cercles à afficher (en pixels)ctry$size &#60;- sqrt(ctry$count*4 / pi)## Label des cercles (ce qui apparait quand on click dessus)ctry$label &#60;- paste("&#60;b&#62;", ctry$name, "&#60;/b&#62; &#60;br&#62;Pays cité dans ",                     ctry$count, "chroniques.")# Construction de la cartelibrary(leaflet)## Initialisation m &#60;- leaflet(padding = 0)## Ajout des paysm &#60;- 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 cerclesm &#60;- 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 &#60;- 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 cartem$width &#60;- 474m$height &#60;- 200# Export de la carte en htmllibrary(htmlwidgets)saveWidget(m, 'map.html', selfcontained = TRUE)Le résultatIl 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 remarquesLe package leaflet est assez facile d'utilisation, même sans utiliser la syntaxe pipe à la mode (%&#62;%).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 :-)).