Mapas de Leaflet en los PDF exportados desde R Markdown

Durante la escritura de mi tesis doctoral, que estoy haciendo en R Markdown, me he visto en la necesidad de poner algunos mapas entre el contenido del texto. Como bien sabréis, los archivos de R Markdown pueden exportarse a varios formatos. Y entre estos formatos se encuentra la conversión a PDF. Pues bien, en vez de  obtener una imagen del mapa en cuestión e incorporarla posteriormente al documento final, he decidido tirar de código para poder incorporar los mapas automáticamente. Y para ellos vamos a usar Leaflet, uno de los mejores desarrollos libres en Java para manejar mapas. Por lo tanto, en esta entrada os voy a desvelar cómo podemos poner mapas de Leaflet en los PDF exportados desde R Markdown.

Quiero leer...

Por qué quiero incluir mapas en mi tesis

Bueno, realmente, no es obligatorio añadirlos. Más bien una pijada. Lo que quiero es poner un mapa donde se marquen las ciudades a las que he asistido a congresos científicos.

R Studio y los paquetes necesarios

La escritura de mi tesis, como mencioné al principio, la estoy haciendo en el lenguaje R Markdown, dentro de la interfaz RStudio (aquí hablo sobra otra interfaz gráfica bastante más sencilla, R Commander). El caso, para poder poner mapas de Leaflet en los PDF exportados desde R Markdown tenemos que tener instalados varios paquetes específicos de R, a saber: leaftlet, webshot y PhantomJS. Aunque si trabajáis con R Studio, un paquete imprescindible para poder hacer las exportaciones a PDF, Word y HTML desde archivos R Markdown es knitr.

Instalamos leaflet, webshot y knitr

Los códigos para instalarlos en R son muy sencillos.

[sourcecode lang=»r»] install.packages("leaflet", dependencies = TRUE)
install.packages("webshot", dependencies = TRUE)
install.packages("knitr", dependencies = TRUE)
[/sourcecode]

A continuación veremos la relación entre webshot y PhantomJS.

Instalamos PhantomJS

La instalación del paquete PhanthomJS, que no está incluido en los servidores oficiales CRAN, se hace mediante el paquete webshot, tal y como se describe aquí. Podemos instalarlo de dos modos:

[sourcecode lang=»r»] # Opción 1
library(webshot) # cargamos el paquete webshot
install_phantomjs() # ejecutamos la función de instalación

# Opción 2
webshot::install_phantomjs()
[/sourcecode]

Sea cual sea la opción escogida, el resultado será la instalación del paquete.

Poner mapas de Leaflet en los PDF exportados desde R Markdown

Vamos a empezar lo interesante ahora mismo. Veréis que poner mapas de Leaflet en los PDF exportados desde R Markdown es una tarea relativamente sencilla. Y además es un tema recurrente en Viva el Software Libre, ya que nos declaramos enamorados de OpenStreetMap. Si queréis aprender a editar los mapas de OSM, es dejamos este fabuloso curso online.

Introducimos un chunk en nuestro archivo de R Markdown

Los chunks son líneas de código dentro de un archivo R Markdown que nos permite ejecutar código de R (entre otros). Clásicamente están identificadas por «`{r} al principio, y «` al final. Todo lo que esté en ese intervalo es código de R que al exportarse a un archivo externo (como el PDF), será ejecutado e implementado en el archivo final.

Introducimos el código del paquete leaflet para mostrar el mapa

Ahora vamos a introducir las líneas de código del paquete leaflet que nos permitirán mostrar el mapa.

[sourcecode lang=»r»] «`{r}
library(leaflet)
leaflet() %>% addTiles() %>%
setView(2.197, 41.377, zoom = 6) %>%
addPopups(-2.9457, 43.2572, ‘SEAF Bilbao 2012’)
«`
[/sourcecode]

Y vamos a ver las líneas anteriores en deternimiento:

  • La primera y último con el inicio y final del chunk, como vimos antes.
  • La segunda línea está cargando el paquete leaflet.
  • La tercera línea está ejecutando la función leaflet() y addTiles(). Lo dejamos como está de momento.
  • La cuarta línea tiene la función setView(). Aquí tenemos que indicar las coordenadas centrales del mapa, y el nivel de zoom que queremos.
  • La quinta línea ejecuta la función addPopups(), que lo que hace es señalar con un bocadillo un texto en unas coordenadas concretas. Lógamente, las coordenadas deben ser las mismas que en la función anterior. En mi caso muestro un congreso al que asistí como ponente de la Sociedad Española de Antropología Física, SEAF, celebrado en Barcelona en 2017).

Poner mapas de Leaflet en los PDF exportados desde R Markdown

Lamentablemente, si convertimos el archivo R Markdown a HTML en lugar de PDF, el mapa que aparece es interactivo. Sin embargo, al exportarlo a PDF se convierte en un mapa estático. Pero para mi tesis ya va bien.

1 comentario en «Mapas de Leaflet en los PDF exportados desde R Markdown»

Deja un comentario