{"word_count": 543, "character_count": 4392}
Dans un très complet billet de blog, Timo Grossenbacher décrit la création d'une carte thématique avec ggplot2.[embed]https://timogrossenbacher.ch/2016/12/beautiful-thematic-maps-with-ggplot2-only/[/embed]Il y détaille les étapes nécessaires à la création de cette carte en évoquant par exemple des questions de reproductibilité, l'import et la sélection des données, le choix d'une discrétisation, le choix d'une gamme de couleur, l'utilisation de données raster (pour le relief), les questions d'habillage et de design. Dans les commentaires quelqu'un propose une version de cette même carte construite avec lattice (beautiful-thematic-maps: alternative code without using ggplot2) et une version interactive a aussi été développée (Thematic Interactive Map). Voici donc ma contribution sans ggplot2, ni lattice, ni interactivité :-).# packages nécessaireslibrary(rgdal)library(raster)library(cartography)# import des données gde_15 &#60;- readOGR(&#34;input/geodata/gde-1-1-15.shp&#34;, layer = &#34;gde-1-1-15&#34;)relief &#60;- raster(&#34;input/geodata/02-relief-georef-clipped-resampled.tif&#34;)age &#60;- read.csv(&#34;input/avg_age_15.csv&#34;, stringsAsFactors = F)# pour l&#039;export de la carte# png(&#34;chuiche.png&#34;, width = 600, height = 440, res = 96)# j&#039;utilise la police &#34;liberation&#34; qui est une police libre # https://en.wikipedia.org/wiki/Liberation_fontspar(mar = c(3,0.2,1.2,0.2), bg = &#34;#f5f5f2&#34;, family = &#34;liberation&#34;)# affichage du reliefbb &#60;- extent(relief)plot.new()plot.window(xlim = bb[1:2], ylim = bb[3:4], asp = TRUE)plot(relief, legend = FALSE, axes = FALSE, box = FALSE,     col = colorRampPalette(c(&#34;grey50&#34;,&#34;white&#34;))(25),     add = TRUE)# discrétisation de la variable# j&#039;utilise la méthode &#34;q6&#34; qui permet de bien # distinguer les valeurs extrèmes# ?getBreaksbks &#60;- getBreaks(v = age$avg_age_15, method = &#34;q6&#34;)# choix d&#039;une gamme de couleurcols &#60;- c(&#34;#FCC696&#34;, &#34;#F88F79&#34;, &#34;#DA6688&#34;,           &#34;#AB5596&#34;, &#34;#7D4495&#34;, &#34;#4D3E71&#34;)# affichage de l&#039;age moyenchoroLayer(spdf = gde_15, df = age,            spdfid = &#34;BFS_ID&#34;, dfid = &#34;bfs_id&#34;,            var = &#34;avg_age_15&#34;, method = &#34;q6&#34;, col = cols,            border = &#34;white&#34;, lwd = 0.2, legend.pos = &#34;n&#34;,           add = TRUE )# ajout d&#039;une échelle et d&#039;une flèche nordnorth(col = &#34;#4D3E71&#34;)barscale(size = 20)# ajout du titre, sous titre et sources.mtext(text = &#34;Switzerland&#039;s regional demographics&#34;,       side = 3, line = 0,adj = 0, col = &#34;#4D3E71&#34;, font = 2)mtext(text = &#34;Average age in Swiss municipalities, 2015&#34;,       side = 3, line = - 1,adj = 0, cex = 0.8, col = &#34;#4D3E71&#34; )mtext(text = &#34;Map CC-BY-SA; Author: Timothée Giraud, Geometries: ThemaKart, BFS; Data: BFS, 2016; Relief: swisstopo, 2016&#34;,      side = 1, line = 2,adj = 1, cex = 0.5, col = &#34;grey40&#34; )# J&#039;utilise la méthode décrite ici (https://rgeomatic.hypotheses.org/878)# pour insérer un histogramme dans la carte. par(fig = c(grconvertX(c(480000, 840000), from=&#34;user&#34;, to=&#34;ndc&#34;),            grconvertY(c(55000,  77000) , from=&#34;user&#34;, to=&#34;ndc&#34;)),    mar = c(0,0,0,0),      new = TRUE)# ajout d&#039;un histogramme qui servira de légendehist(age$avg_age_15, probability = T, breaks = bks,      col = cols, axes = F, xlab=&#34;&#34;, ylab = &#34;&#34;,     main = &#34;&#34;, border = cols)axis(side = 1, at = bks[c(1,3,5,7)], labels = round(bks[c(1,3,5,7)], 1),     cex.axis = 0.5, tick = FALSE, line = -1.1, col.axis = &#34;grey10&#34;)axis(side = 1, at = bks[c(2,4,6)], labels = round(bks[c(2,4,6)], 1),     cex.axis = 0.5, tick = FALSE, line = -1.1, col.axis  = &#34;grey20&#34;)text(x = 33.1, y = 0.16, label = &#34;Average age&#34;, cex = 0.8, adj = c(0,1),      font = 3, col = &#34;#4D3E71&#34;)Une bonne partie de la discussion autour de la carte initiale porte sur le choix d'une bonne discrétisation et sur la création d'une légende rendant compte de cette discrétisation. La légende que je propose rend plutôt bien compte de la distribution de la variable et de sa discrétisation, certes au prix d'un poids visuel assez important...Vous pouvez retrouver ce script et les données initiales dans un fork du dépôt de Timo Grossenbacher.