How to interactively position legends and layout elements on a map with cartography

In cartography several functions have a pos or legend.pos argument. These arguments can take the following values: « topleft », « top », « topright », « right », « bottomright », « bottom », « bottomleft », « bottomleftextra », « left » or a vector of two coordinates in map units (c(x, y)).

The posibility to use a vector of coordinates is useful for placing an element at a precise location:

library(sf)
library(cartography)
mtq <- st_read(system.file("gpkg/mtq.gpkg", package="cartography"))
png("poslegend1.png", width = 474, height = 555)
par(mar = c(0,0,0,0))
plot(st_geometry(mtq))
# precise location of the bottomleft corner of the legend
legpos <- c(717200, 1637100)
points(x = legpos[1], y = legpos[2], pch = 4)
propSymbolsLayer(x = mtq, var = "POP", 
                 legend.pos = legpos)
dev.off()

The locator() function allows users of an interactive R session to click on a graphic device to obtain coordinates of the cursor in the device’s coordinate reference system:

One can take advantage of this function to interactively position legends and layout elements on a map with cartography using unlist(locator(1)) as input for pos or legend.pos:

code for the figure: https://gist.github.com/rCarto/3a8255bb2ee2dae299a5ae13925e0cd3

2 réflexions sur « How to interactively position legends and layout elements on a map with cartography »

  1. Bonjour,
    je vous remercie de mettre ces contenue a notre disposition.

    Je suis étudiant M2 Géomatique Paris 8, donc je vous ai eu en cours « cartographie avec R ».
    J’ai un soucis, je voudrais éditer une carte choropleth, tout en faisant figurer les enlacements pour lesquelles il n’y a pas d’information. (no data) et faire apparaitre ceci dans la légende. pouvez vous m’aidez. S’il vous plait…?

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

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