Le package mapsf

Le package mapsf vient tout juste d’arriver sur le CRAN.
mapsf est un package de cartographie thématique léger et ergonomique.

Le package est accompagné d’un site web et d’une vignette.

This post is available in english here.

Principales fonctionnalités du package

mf_map()

La fonction principale de mapsf est mf_map(). Cette unique fonction permet de réaliser un grand nombre de types de cartes. 

Le premier argument, x, est destiné à recevoir un objet sf (de points, lignes ou polygones). Le deuxième argument, var, doit recevoir le nom de la variable à représenter. Le troisième argument, type, définira le type de carte à créer.

Exemple de carte choroplèthe:

Voici un exemple de chaque type de carte :

L’habillage

Plusieurs fonctions sont dédiées à l’affichage d’éléments d’habillage de la carte. Le script suivant en mobilise la plupart :

Thèmes

Il est possible de choisir un thème graphique pour les cartes grâce à la fonction mf_theme().

Les thèmes proposés par mapsf sont visibles sur les cartes suivantes:

Il est possible de créer ses propres thèmes. Les paramètres des thèmes sont la couleur de fond et la couleur principale, la taille des marges, et plusieurs paramètres du titre.

Les cartons (ou insets)

Il est possible de créer des cartons cartographiques avec la fonction mf_inset_on().

Il est aussi possible en utilisant mf_inset_on(x = "worldmap") puis mf_worldmap() d’afficher une carte de situation dans le carton:

Dans un carton on peut afficher ce que l’on veut, pas uniquement une carte. En fait une fenêtre graphique est affichée dans la fenêtre graphique courante :

Export des cartes

La fonction mf_init() permet, entre autre, d’initialiser une carte centrée sur un objet géographique.

Notons l’utilisation du paramètre expandBB qui permet d’étendre l’espace de la carte sur l’un (ou plusieurs) de ces côtés. Ce paramètre peut être utile pour réserver un espace pour les légendes par exemple.

Cette fonction permet également d’exporter les cartes aux formats PNG et SVG. Le ratio hauteur/largeur de la figure produite respecte celui de l’objet géographique (x). Cela permet de produire des cartes bien centrées et sans marges excessives.

Sucre syntaxique

Les fonctions prenant en entrée un objet sf sont pour l’essentiel compatible avec la syntaxe pipe (le %>% de magrittr, et fort probablement le futur |>)  :

Développement

Le développement du package se fait sur la plateforme GitHub.
Ce projet utilise les conventional commits qui forcent la création d’un historique claire et explicite des étapes de développement. 
Contrairement à cartography, mapsf ne devrait pas être enrichi de méthodes de représentation exotiques (cartes en gaufres, cartes en grilles régulières, triangles proportionnels, import de tuiles OpenStreetMap, cartes de discontinuités…). Si ces fonctionnalités se révèle nécessaires elle feront sûrement l’objet d’un ou plusieurs packages complémentaires (voir par exemple maptiles pour l’import de tuiles cartographiques raster).

Et cartography alors ?

La première version de cartography est sortie en 2015. Cette version était faite pour interagir avec les fonctions et objets des packages sp, rgdal et rgeos (sf n’existait pas encore). La version 2.0.0 a introduit la possibilité de cartographier des objets sf. La majorité du code a aussi été adaptée pour utiliser sf plutôt que la trinité sp, rgdal, rgeos. L’API du package (fonctions, noms des fonctions, noms des arguments) est restée a peu près identique.

Certains choix initiaux finissent par peser sur le développement et la maintenance du package (utilisation du camelCase, des noms de fonctions et d’arguments super longs et parfois peu intuitifs). La nécessité de backward compatibility (cartography a quand même été téléchargé au moins 132000 fois sur le CRAN de RStudio) tend a freiner le développement de nouvelles fonctionnalités. C’est pour ces raisons que j’ai décidé de créer un successeur à cartography.

Que va donc devenir cartography?
A partir de sa prochaine version, cartography entre en mode maintenance. Cela signifie que le package continuera a fonctionner indéfiniment sans ajout de nouvelles fonctionnalités. Les bugs seront corrigés et le package restera sur le CRAN.
Les projets utilisant déjà cartography peuvent continuer à l’utiliser mais j’incite les nouveaux projets à utiliser plutôt mapsf.
La vignette de mapsf propose un tableau de correspondance des fonctions.

Remerciements

Je tiens à remercier Hugues Pecout pour son magnifique logo hexagonale et ses remarques pertinentes sur l’ergonomie du package, Diego Hernangómez pour son travail sur le site web du package, et bien sûr les auteurs et contributeurs du package sf et des librairies indispensables GEOS, GDAL et PROJ.


5 réflexions sur « Le package mapsf »

  1. Bonjour,
    j’ai beaucoup apprécié les fonction du package mapsf et la clarté des cartes. Lorsque j’exécute les exemples de la Martinique fournis avec le package, j’obtiens les même résultats. Cependant, en appliquant les mêmes fonctions, avec le shapefile de mon pays (Congo ou République du Congo) j’obtiens des errers lors qu’il s’agit de calculer les centroïdes ou faires de la cartographie thématique. qu’est-ce que vous me conseillé ?
    Voici la nature des erreurs obtenues:
    “Error in s2_geography_from_wkb(x, oriented = oriented, check = check) :
    Evaluation error: Found 1 feature with invalid spherical geometry.
    [4] Loop 2 is not valid: Edge 2 has duplicate vertex with edge 5.
    In addition: Warning message:
    In st_centroid.sf(d2) :
    st_centroid assumes attributes are constant over geometries of x”
    ou
    “Error in s2_geography_from_wkb(x, oriented = oriented, check = check) :
    Evaluation error: Found 1 feature with invalid spherical geometry.
    [4] Loop 2 is not valid: Edge 2 has duplicate vertex with edge 5.

  2. Bonjour,
    J’aurais voulu savoir s’il était possible de mettre un graph construit avec ggplot dans un inset car j’ai l’impression que ça ne fonctionne pas ?
    Merci par avance,

    1. Bonjour,
      En effet le package mapsf utilise le système de graphiques de base de R.
      Il n’est donc pas possible d’utiliser ggplot2 dans les insets.
      Cordialement,
      TG

  3. Bonjour Mr Giraud,
    ne sachant comment vous joindre, j’utilise ce subterfuge pour vous contacter. Je ne suis ni cartographe ni informaticien. aussi pour combler cette grave lacune, j’ai pris beaucoup de plaisir à lire votre excellent travail “Cartographie avec R”. Cependant, je bute sur l’exercice 1.11 en particulier en ce qui concerne le chargement du fichier Occitanie.gpkg avec la fonction st_read (qui par ailleurs fonctionne très bien avec des fichiers .shp récupérés via admin.express). J’utilise un (vieux) MacBookair (R Version 3.6.6 non upgradable) où occ_raw <- st_read(dsn = "data/Occitanie.gpkg", stringsAsFactors = FALSE) échoue totalement et un IMac (R version 4.02) où cette fonction opère correctement à la condition expresse de supprimer stringsAsFactors = FALSE . Pouvez-vous m'aider à comprendre ce comportement étrange ? Avec mes remerciements anticipés.
    Dr JC Bartier

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.