4  La mise en page

Pour être finalisée, une carte thématique doit contenir certains éléments additionnels tels que : le titre, l’auteur, la source, l’échelle, l’orientation…

4.1 Les données d’exemple

Les lignes suivantes importent les couches d’information spatiales situées dans le fichier geopackage lot.gpkg.

library(sf)
# import des communes du Lot
com <- st_read("data/lot.gpkg", layer = "communes", quiet = TRUE)
# import des départements français
dep <- st_read("data/lot.gpkg", layer = "departements", quiet = TRUE)
# import des restaurants
resto <- st_read("data/lot.gpkg", layer = "restaurants", quiet = TRUE)
# import des routes autour de la commune de Gramat
route <- st_read("data/lot.gpkg", layer = "routes", quiet = TRUE)

4.2 Les thèmes

La fonction mf_theme() définit un thème cartographique. L’utilisation d’un thème permet de définir plusieurs paramètres graphiques qui sont ensuite appliqués aux cartes créées avec mapsf. Ces paramètres sont : les marges de la carte, la couleur principale, la couleur de fond, la position et l’aspect du titre.

4.2.1 Utiliser un thème prédéfini

Une série de thèmes prédéfinis est disponible par défaut (voir ?mf_theme).

library(mapsf)
# Utilisation d'un thème prédéfini
mf_theme("default")
mf_map(com)
mf_title("Theme : 'default'")
mf_theme("darkula")
mf_map(com)
mf_title("Theme : 'darkula'")
mf_theme("candy")
mf_map(com)
mf_title("Theme : 'candy'")
mf_theme("nevermind")
mf_map(com)
mf_title("Theme : 'nevermind'")

4.2.2 Modifier un thème existant

Il est possible de modifier un thème existant. Dans cet exemple, nous utilisons le thème “default” et nous en modifions quelques paramètres.

library(mapsf)
mf_theme("default")
mf_map(com)
mf_title("default")
mf_theme("default", tab = FALSE, font = 4, bg = "grey60", pos = "center")
mf_map(com)
mf_title("modified default")

4.2.3 Créer un thème

Il est également possible de créer un thème.

mf_theme(
  bg = "lightblue",    # couleur de fond
  fg = "tomato1",      # couleur principale
  mar = c(0,0,1.5,0),  # marges
  tab = FALSE,         # style "onglet" pour le titre
  inner = FALSE,       # titre à l'intérieur de la zone de carte ou à l'extérieur
  line = 1.5,          # espace dédié au titre
  pos = "center",      # position du titre
  cex = 1.2,           # taille du titre
  font = 2             # type de fonte pour le titre
)
mf_map(com)
mf_title("New theme")

4.3 Les titres

La fonction mf_title() permet d’ajouter un titre à une carte.

mf_theme("default")
mf_map(com)
mf_title("Titre de la carte")

Il est possible de personnaliser l’aspect du titre.

mf_map(com)
mf_title(
  txt = "Titre de la carte", 
  pos = "center", 
  tab = FALSE, 
  bg = "tomato3", 
  fg = "lightblue", 
  cex = 1, 
  line = 1.2, 
  font = 1, 
  inner = FALSE
)

4.4 Flèche d’orientation et échelle

La fonction mf_arrow() permet de choisir la position et l’aspect de la flèche d’orientation.
La fonction mf_scale() permet de choisir la position et l’aspect de l’échelle.

mf_map(com)
mf_scale(size = 20, lwd = 2, cex = 1.2)
mf_arrow()

Toutes les cartes doivent avoir une échelle et une flèche d’orientation !?

Carnet Observable interactif de Nicolas Lambert

4.5 Crédits

La fonction mf_credits() permet d’afficher une ligne de crédits (sources, auteur…).

mf_map(com)
mf_credits("Auteurs : TG & HP\nSources : IGN, 2018")

4.6 Habillage complet

La fonction mf_layout() permet d’afficher tous ces éléments (titre, c.

mf_map(com)
mf_layout(
  title = "Le Lot",
  credits = "Auteurs : TG & HP\nSources : IGN, 2018",
  arrow = TRUE, 
  scale = TRUE
)

4.7 Annotations

# Sélection d'une commune
cahors <- com[com$NOM_COM == "Cahors", ]
mf_map(com)
mf_annotation(
  x = cahors, 
  txt = "Cahors", 
  halo = TRUE, 
  cex = 1.5
)

4.8 Étiquettes

La fonction mf_label() est dédiée à l’affichage d’étiquettes.

# Selection des communes qui intersectent la 
# commune de Cahors
com_sel <- st_filter(com, com[com$NOM_COM == "Cahors", ])
mf_map(com_sel)
mf_label(
  x = com_sel,
  var = "NOM_COM",
  col= "black",
  halo = TRUE,
  overlap = FALSE, 
  lines = FALSE
)
mf_scale()

L’argument halo = TRUE permet d’afficher un léger halo autour des étiquettes et l’argument overlap = FALSE permet de créer des étiquettes ne se recouvrant pas.

4.9 Les légendes

La fonction mf_legend() permet d’afficher des légendes.

mf_map(com)
mf_legend(
  type = "prop", 
  val = c(1000,500,200,10), 
  inches = .4, 
  title = "Population", 
  pos = "topleft"
)
mf_legend(
  type = "choro", 
  val = c(0,10,20,30,40),
  pal = "Greens", 
  pos = "bottomright", 
  val_rnd = 0
)

Le package maplegend

La fonction mf_legend() s’appuie sur le package maplegend

4.10 Centrer la carte sur une région

La fonction mf_map() permet d’initialiser une carte en la centrant sur une objet spatial en choisissant un fond et des bordures transparantes.

mf_map(x = com_sel, col = NA, border = NA)
mf_map(com, add = TRUE)
mf_map(com_sel, col = NA, border = "red", lwd = 2, add = TRUE)

4.11 Afficher plusieurs cartes sur la même figure

Il faut ici utiliser l’argument mfrow de la fonction par(). Le premier chiffre représente le nombre lignes et le deuxième le nombre de colonnes.
Par exemple par(mfrow = c(1, 2)) (1 ligne et 2 colonnes) permet d’afficher deux cartes côte à côte.

# define the figure layout (1 row, 2 columns)
opar <- par(mfrow = c(1, 2))
# define theme
mf_theme("default", mar = c(0,0,1.2,0), tab = FALSE, pos = "center")
# first map
mf_map(com)
mf_map(com, "TER_F", "prop", 
       inches = .2,
       val_max = 4000, 
       leg_pos = "topleft", 
       leg_title = "N.")
mf_title("Tertiaire: Femmes")
# second map
mf_map(com)
mf_map(com, "TER_H", "prop",
       inches = .2,
       val_max = 4000, 
       leg_pos = NA)
mf_title("Hommes")
par(opar)

Comparer des cartes de cercles proportionnels

Notons ici l’utilisation des arguments inches et val_max avec des valeurs identiques pour les deux carte. Cela rend possible les comparaisons entres les deux cartes.

4.12 Export des cartes

mf_export() permet d’exporter des cartes en PNG ou en SVG.
Le ratio hauteur/largeur de la carte correspondra au ratio hauteur/largeur d’un objet spatial.
Si width est spécifié alors height est déduit du ratio hauteur/largeur de x, de la taille des marges de la figure et des dimensions du titre (du thème utilisé en somme).
mf_export() peut aussi être utilisé pour ajouter de l’espace sur un ou plusieurs côté de la carte ou encore centrer la carte sur une zone particulière.

Toujours utiliser add = TRUE après un appel à mf_export() et ne pas oublier d’utiliser dev.off() pour finaliser l’export de la figure.

#création d'un thème personnel
mf_theme("candy", bg = "grey80")
mf_export(
  x = com, 
  filename = "img/com_default.png",
  width = 600
)
mf_map(com, add = TRUE)
mf_title("Le Lot")
dev.off()

com_default.png

L’emprise de cette carte est exactement celle de la région affichée.

Lors de l’export suivant nous ajoutons de l’espace sur la partie droite de la carte (50% de la largeur de x).

mf_export(
  x = com, 
  filename = "img/com_expand.png",
  width = 600, 
  expandBB = c(0, 0, 0, .5)
)
mf_map(com, add = TRUE)
mf_title("Le Lot")
dev.off()

com_expand.png

4.13 Ajouter une image sur une carte

Cela peut être utile pour ajouter un logo, un pictogramme. La fonction readPNG() du package png permet l’ajout d’images sur une figure.

mf_theme("default", mar = c(0,0,0,0))
library(png)
# import de l'image
logo <- readPNG("img/Logo CG 46 - Bleu.png")
# dimension de l'image en unité de la carte
pp <- dim(logo)[2:1] * 20
# Définition d'un point d'encrage de l'image dans la figure, ici
# le coin supérieur gauche de la bounding box du département
xy <- st_bbox(com)[c(1,4)]
mf_map(com, col = "#D1914D", border = "white")
rasterImage(
  image   = logo,
  xleft   = xy[1],
  ybottom = xy[2] - pp[2],
  xright  = xy[1] + pp[1],
  ytop    = xy[2]
)

4.14 Placer précisément un élément sur la carte

Dans plusieurs fonctions de mapsf il est possible de placer des éléments d’habillage de manière interactive avec la position “interactive”.

Plus généralement la fonction locator() permet de cliquer sur une figure et d’obtenir les coordonnées d’un point dans le système de coordonnées de la figure (de la carte). locator()peut être utilisée sur la plupart des graphiques (pas ceux produits avec ggplot2).

4.15 Ajouter un ombrage à une couche

La fonction mf_shadow() permet de créer une ombre à une couche de polygones.

mf_theme("default")
mf_shadow(com)
mf_map(com, add=TRUE)

4.16 Création de cartons

La fonction mf_inset_on() permet de démarrer la création d’un carton. Il faut ensuite “refermer” le carton avec mf_inset_off().

biars <- com[com$NOM_COM == "Biars-sur-Cère", ]
# affichage de toutes les communes
mf_map(com)
# affichage de la sélection de communes
mf_map(biars, col = "tomato4", border = "tomato1", 
       lwd = 2, add = TRUE)

# Démarrer le carton 
# en haut à gauche sur
# le ratio width/height de biars
# avec une largeur d'1/4 de la largeur de la figure
mf_inset_on(x = biars, pos = "topleft", cex = .25)
# couleur du fond
mf_theme(bg = "#f7f7f7")
# affichage de la commune cible
mf_map(biars, col = "tomato4", border = "tomato1")
# affichage des communes
mf_map(com, col = NA, add = TRUE)
# échelle
mf_scale(size = 1, pos = "bottomright")
# affichage d'un cadre
box()
# Fermer le carton
mf_inset_off()

# Ajouter titre et échelle
mf_title("Biars-sur-Cère")
mf_scale(10, pos = 'bottomright')

Carton “carte du monde”

On peut facilement créer un carton avec la position d’un point sur une carte du monde en combinant les fonctions mf_worldmap() et mf_inset_on(x = "worldmap", ...) :

mf_map(com)
mf_inset_on(x = "worldmap",cex = .3, pos = "topleft")
mf_worldmap(com)
mf_inset_off()
mf_title("Le Lot dans le Monde!")

Exercice

  1. Importer la couche des communes du département du Lot à partir du fichier geopackage lot.gpkg.

  2. Importer le fichier com.csv.
    Ce jeu de données porte sur les communes du lot et contient plusieurs variables supplémentaires:

    • le nombre d’actifs (ACT).
    • le nombre d’actifs dans l’industrie (IND)
    • La part des actifs dans la population totale (SACT)
    • La part des actifs dans l’industrie dans le total des actifs (SACT_IND)
  3. Joindre le jeu de données et la couche des communes.

  4. Créez une carte représentant la population active travaillant dans l’industrie.

  5. Ajoutez les éléments d’habillage indispensables.

  6. Utilisez un thème personnalisé.

  7. Ajoutez un carton de localisation du Lot.

  8. Exportez la carte au format PNG avec 800 pixels de large.

  9. Comment rendre la carte plus intelligible ? Allez-y !