La recherche reproductible
Au coeur de la méthode scientifique
Les sciences se reposent sur le principe de reproductibilité.
La reproductibilité est un élément permettant d’évaluer la validité des résultats.
Le spectre de la reproductibilité
Accompagner les publications scientifiques des jeux de données et codes sources pour permettre aux collègues de reproduire les résultats.
La cartographie reproductible
Les cartes, comme les autres productions graphiques ou statistiques sont des éléments à parts entières des études scientifiques.
La plupart des cartes produites dans un contexte académique sont issues de processus complexes.
Elles sont souvent produites en utilisant une grande variété de logiciels et de formats.
Cette variété de formats et de logiciels rend difficile la reproduction des cartes.
Simplifier les chaines de traitement pour couvrir les différentes étapes de la construction cartographique.
R et son écosystème spatial
R est un langage et un environnement permettant de réaliser des traitements statistiques et de représentations graphiques.
R est un logiciel libre sous license GNU General Public License.
R est multiplateforme (GNU/Linux, Windows, OS X…).
Autour de R
Un large ecosystème de packages créés par les contributeurs.
RStudio, un environnement de développement intégré.
Une solution de literate programming basée sur le langage Markdown.
Des logiciels de gestion de version (git).
sf
, pierre angulaire de l’écosystème spatial de R
sf
, les fonctionnalités d’un SIG
- Import / Export de données spatiales (vectorielles)
- Affichage
- Gestion des systèmes de coordonnées (les projections)
- Sélections spatiales (intersects, within, contains… )
- Opérations sur les géométries (zone tampon, centroïdes, agrégations, intersections, découpages…)
- Mesures (longueurs, distances, surfaces)
Mais les fonctionnalités cartographiques de sf
sont limitées.
Le package mapsf
mf_map()
mf_map()
est la fonction principale du package.
mf_map(x = objet_sf,
var = "variable",
type = "type de représentation",
...)
Habillage
Exemple
- Affichage du fond de carte :
mtq <- mf_get_mtq()
# Plot the base map
mf_map(x = mtq)
- Affichage d’une carte choroplèthe avec les paramètres par défaut :
mtq <- mf_get_mtq()
# Plot a choropleth map
mf_map(x = mtq, var = "MED", type = "choro")
- Personnalisation des paramètres de la représentation
mtq <- mf_get_mtq()
# Plot a choropleth map
mf_map(x = mtq, var = "MED", type = "choro",
pal = "Dark Mint",
breaks = "quantile",
nbreaks = 6,
leg_title = "Median Income\n(euros)",
leg_val_rnd = -2,
leg_pos = "topright")
- Ajout d’éléments d’habillage
mtq <- mf_get_mtq()
# Plot a choropleth map
mf_map(x = mtq, var = "MED", type = "choro",
pal = "Dark Mint",
breaks = "quantile",
nbreaks = 6,
leg_title = "Median Income\n(euros)",
leg_val_rnd = -2,
leg_pos = "topright")
# Plot a layout elements
mf_title("Wealth in Martinique, 2015")
mf_credits("T. Giraud\nSources: INSEE & IGN, 2018")
mf_scale(size = 5)
mf_arrow('topleft')
- Utilisation d’un thème
mtq <- mf_get_mtq()
# Start a map using a theme
mf_init(x = mtq, theme = "dark")
# Plot a choropleth map
mf_map(x = mtq, var = "MED", type = "choro",
pal = "Dark Mint",
breaks = "quantile",
nbreaks = 6,
leg_title = "Median Income\n(euros)",
leg_val_rnd = -2,
leg_pos = "topright",
add = TRUE)
# Plot a layout elements
mf_title("Wealth in Martinique, 2015")
mf_credits("T. Giraud\nSources: INSEE & IGN, 2018")
mf_scale(size = 5)
mf_arrow('topleft')
- Ajout d’un ombrage
mtq <- mf_get_mtq()
# Start a map using a theme
mf_init(x = mtq, theme = "dark")
# Plot a shadow
mf_shadow(mtq, col = "grey10", add = TRUE)
# Plot a choropleth map
mf_map(x = mtq, var = "MED", type = "choro",
pal = "Dark Mint",
breaks = "quantile",
nbreaks = 6,
leg_title = "Median Income\n(euros)",
leg_val_rnd = -2,
leg_pos = "topright",
add = TRUE)
# Plot a layout elements
mf_title("Wealth in Martinique, 2015")
mf_credits("T. Giraud\nSources: INSEE & IGN, 2018")
mf_scale(size = 5)
mf_arrow('topleft')
- Ajout d’un carton de localisation
mtq <- mf_get_mtq()
# Start a map using a theme
mf_init(x = mtq, theme = "dark")
# Plot a shadow
mf_shadow(mtq, col = "grey10", add = TRUE)
# Plot a choropleth map
mf_map(x = mtq, var = "MED", type = "choro",
pal = "Dark Mint",
breaks = "quantile",
nbreaks = 6,
leg_title = "Median Income\n(euros)",
leg_val_rnd = -2,
leg_pos = "topright",
add = TRUE)
# Add an inset world map
mf_inset_on(x = "worldmap", pos = "right")
mf_worldmap(mtq, col = "#0E3F5C")
mf_inset_off()
# Plot a layout elements
mf_title("Wealth in Martinique, 2015")
mf_credits("T. Giraud\nSources: INSEE & IGN, 2018")
mf_scale(size = 5)
mf_arrow('topleft')
- Extension des marges de la figure sur la droite
mtq <- mf_get_mtq()
# Start a map using a theme and extra margins
mf_init(x = mtq, theme = "dark",
expandBB = c(0,0,0,.3))
# Plot a shadow
mf_shadow(mtq, col = "grey10", add = TRUE)
# Plot a choropleth map
mf_map(x = mtq, var = "MED", type = "choro",
pal = "Dark Mint",
breaks = "quantile",
nbreaks = 6,
leg_title = "Median Income\n(euros)",
leg_val_rnd = -2,
leg_pos = "topright",
add = TRUE)
# Add an inset world map
mf_inset_on(x = "worldmap", pos = "right")
mf_worldmap(mtq, col = "#0E3F5C")
mf_inset_off()
# Plot a layout elements
mf_title("Wealth in Martinique, 2015")
mf_credits("T. Giraud\nSources: INSEE & IGN, 2018")
mf_scale(size = 5)
mf_arrow('topleft')
Création de cartons
Vignette : How to Create Inset Maps
- Avec un objet géographique
mf_map(mtq)
mf_inset_on(x = mtq[1, ],
cex = .3)
mf_map(mtq[1, ])
mf_inset_off()
- Avec une carte de localisation
mf_map(mtq)
mf_inset_on(x = "worldmap",
pos = "bottomleft")
mf_worldmap(x = mtq)
mf_inset_off()
- Encart non cartographiques
Raster
library(maptiles)
mtq <- st_transform(mtq, 3857)
osm <- get_tiles(
mtq,
provider = "Stamen.TerrainBackground",
crop= TRUE,
zoom = 11
)
th <- mf_theme(
x = "default", bg = "#99b3cc",
inner = TRUE, line = 1.5, cex = 1,
pos = "right", mar = c(0,0,0,0)
)
mf_export(x = osm, filename = "img/osm.png",
width = 672, theme = th, res = 150)
mf_raster(osm)
mf_map(mtq, col = NA, add = TRUE)
mf_scale()
mf_title("mf_raster()")
mf_credits(get_credit("Stamen.TerrainBackground"))
dev.off()
Nouveau
library(mapsf)
mtq <- mf_get_mtq()
mf_init(mtq, theme = "default")
mf_background("img/blackboard.jpg")
mf_map(mtq, lwd = 3, col = NA,
border = "white", add = TRUE)
mf_credits(
txt = "Photo by Noita Digital on Unsplash",
col = "white"
)
mf_title("mf_background()")
Développement
Un nombre minimal de dépendances solides.
CI/CD avec les GitHub Actions
Tests avec le package
tinytest
, couverture avec CodecovUtilisation de la convention de nommage des commits conventional commits
Merci
sessionInfo()
## R version 4.1.1 (2021-08-10)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Debian GNU/Linux 11 (bullseye)
##
## Matrix products: default
## BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.9.0
## LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.9.0
##
## locale:
## [1] LC_CTYPE=fr_FR.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=fr_FR.UTF-8 LC_COLLATE=fr_FR.UTF-8
## [5] LC_MONETARY=fr_FR.UTF-8 LC_MESSAGES=fr_FR.UTF-8
## [7] LC_PAPER=fr_FR.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=fr_FR.UTF-8 LC_IDENTIFICATION=C
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] mapsf_0.3.0 sf_1.0-3
##
## loaded via a namespace (and not attached):
## [1] Rcpp_1.0.7 bslib_0.3.1 compiler_4.1.1 pillar_1.6.4
## [5] jquerylib_0.1.4 highr_0.9 rmdformats_1.0.3 class_7.3-19
## [9] tools_4.1.1 digest_0.6.28 tibble_3.1.5 jsonlite_1.7.2
## [13] evaluate_0.14 lifecycle_1.0.1 pkgconfig_2.0.3 rlang_0.4.12
## [17] DBI_1.1.1 yaml_2.2.1 xfun_0.27 fastmap_1.1.0
## [21] e1071_1.7-9 s2_1.0.7 stringr_1.4.0 dplyr_1.0.7
## [25] knitr_1.36 generics_0.1.1 sass_0.4.0 vctrs_0.3.8
## [29] tidyselect_1.1.1 classInt_0.4-3 grid_4.1.1 glue_1.4.2
## [33] R6_2.5.1 jpeg_0.1-9 fansi_0.5.0 rmarkdown_2.11
## [37] bookdown_0.24 purrr_0.3.4 magrittr_2.0.1 codetools_0.2-18
## [41] htmltools_0.5.2 ellipsis_0.3.2 units_0.7-2 assertthat_0.2.1
## [45] utf8_1.2.2 KernSmooth_2.23-20 stringi_1.7.5 proxy_0.4-26
## [49] wk_0.5.0 crayon_1.4.1