Exportar gráficos en R

Exportar gráficos en R como PDF, JPEG, PNG, SVG y otros formatos

Cuando desees exportar un gráfico para usarlo en un documento, como una presentación o un artículo científico, debes guardar el gráfico en un formato de alta calidad, ya que no querrás que tus gráficos se vean borrosos o pixelados. En este tutorial aprenderás a exportar gráficos en R a gráficos vectoriales y a formatos de imagen de alta resolución.

Exportar gráficos con el menú en RStudio y R GUI

Si estás usando RStudio puedes exportar un gráfico desde el menú Export del panel de gráficos:

Exportar gráficos en R desde el menú

El menú te permite seleccionar tres opciones: guardar el plot como imagen, como PDF o copiar el gráfico al portapapeles.

Guardar como imagen

Si seleccionas Save as Image… se abrirá la siguiente ventana:

Guardar plot en RStudio como imagen

En la ventana anterior, puedes seleccionar el formato de imagen en el que deseas guardar el gráfico (PNG, JPEG, TIFF, BMP, Metafile, SVG o EPS), el ancho y la altura en píxeles, el directorio en el que se guardará y el nombre del archivo.

Guardar como PDF

Si seleccionas Save as PDF… puedes seleccionar el tamaño del PDF, la orientación, la API de cairo graphics, el directorio para guardar el archivo y el nombre del mismo.

Exportar plot como PDF en RStudio

Copiar al portapapeles

La última opción que puedes seleccionar es copiar la imagen al portapapeles, como bitmap o metafile. También puedes especificar el ancho y el alto del gráfico en píxeles.

Copiar imagen al portapapeles en RStudio

En R GUI tendrás que ir a ArchivoGuardar como y seleccionar el tipo de archivo que prefieras. Si seleccionas Jpeg, también puedes especificar la calidad de la imagen resultante. Como última opción puedes copiar la imagen en el Portapapeles (Copiar para el área de transferencia).

Guardar plot en R GUI desde el menú

En las siguientes secciones revisaremos cómo exportar gráficos en R con código, lo que permite personalizar completamente la salida. Recuerda que los primeros tres (PDF, SVG y PS) son formatos gráficos vectoriales y por tanto no dependen de la resolución, mientras que los otros son formatos de imagen de alta resolución.

Guardar plot en R como PDF, SVG o postscript (PS)

El formato PDF para guardar imágenes es el más utilizado para crear documentos científicos, ya que son fáciles de agregar a LaTeX y mantienen la resolución incluso si haces zoom. Sin embargo, si necesitas editar la imagen después de guardar para agregar algo de decoración o realizar alguna modificación, deberías usar SVG.

Primero, para exportar un gráfico como PDF necesitarás abrir el dispositivo gráfico con la función pdf, crear el gráfico que quieras y, finalmente, cerrar el dispositivo abierto con la función dev.off.

# Abrimos el dispositivo gráfico
pdf("mi_plot.pdf")

# Creamos un gráfico
plot(rnorm(20))

# Cerramos el dispositivo gráfico
dev.off() 

También puedes cambiar el ancho y la altura (en pulgadas) del gráfico de salida, el tamaño del papel y del texto, o modificar el color de fondo, ya que el gráfico PDF tendrá un fondo transparente, o incluso el modo de color, entre otros parámetros gráficos.

# Personalizamos la salida
pdf("mi_plot.pdf",         # Nombre del archivo
    width = 8, height = 7, # Ancho y alto en pulgadas
    bg = "white",          # Color de fondo
    colormodel = "cmyk"    # Modo de color (cmyk para la mayoría de publicaciones)
    paper = "A4")          # Tamaño del papel

# Creamos un gráfico
plot(rnorm(20))

# Cerramos el dispositivo gráfico
dev.off() 

Ten en cuenta que puedes convertir pulgadas a centímetros dividiendo por 2.54.

De forma predeterminada, el argumento paper de la función pdf está establecido en "special", lo que significa que el tamaño del papel está definido por la altura y ancho especificados.

Recuerda ejecutar ?pdf para obtener información adicional de los argumentos de la función.

Segundo, en R puedes exportar un gráfico a SVG (Scalable Vector Graphics) con la función svg. Esta función también permite modificar el alto, ancho y tamaño del texto con los argumentos height, width y pointsize, respectivamente, pero también el anti-alias con el argumento antialias.

# Dispositivo SVG
svg("mi_plot.svg")

# Código del gráfico
plot(rnorm(20))

# Cerramos el dispositivo
dev.off() 

Ten en mente que puedes abrir los archivos SVG con Adobe Illustrator, Inkscape u otro software similar para editar el gráfico vectorial como quieras. Escribe help(svg) para obtener más información sobre los argumentos de la función.

En tercer lugar, para guardar un gráfico como Postscript, puedes utilizar la función postscript.

# Dispositivo PS
postscript("mi_plot.ps")

# Código
plot(rnorm(20))

# Cerramos el dispositivo
dev.off() 

Estos formatos de imagen son independientes de la resolución. Esto significa que puedes hacer zoom en los gráficos resultantes sin perder calidad.

Exportar plot en R como PNG, JPEG, BMP o TIFF

Las funciones de los dispositivos gráficos de formato PNG, JPEG, BMP y TIFF tienen distintos argumentos en común, descritos en la siguiente tabla:

Argumento Descripción
width Ancho (por defecto 480 píxeles)
height Alto (por defecto 480 píxeles)
unit Unidad de medida (“px”, “in”, “cm” y “mm”)
pointsize Tamaño de los textos
bg Color de fondo inicial
res Resolución en ppi
type “cairo”, “Xlib”, “quartz”
(y “cairo-png” para PNG)
antialias Tipo de anti alias

Si configuras el dispositivo gráfico en alta resolución (res = 200), deberás modificar el alto y el ancho de la función correspondiente y los márgenes de tu gráfico con la función par para evitar perder el formato y el diseño original.

Primero, la función png permite guardar una imagen en un archivo PNG (Portable Network Graphics). Este formato de archivo de imagen pesa menos que JPEG con una mejor calidad, admitiendo fondos transparentes.

# Dispositivo PNG
png("mi_plot.png")

# Código
plot(rnorm(20))

# Cerramos el dispositivo
dev.off()

Segundo, para guardar gráficos en JPEG, puedes usar la función jpeg, que también permite establecer la calidad de la imagen como porcentaje con el argumento quality (por defecto 75%).

# Dispositivo JPEG
jpeg("mi_plot.jpeg", quality = 75)

# Código
plot(rnorm(20))

# Cerramos el dispositivo
dev.off()

Tercero, puedes exportar un gráfico como BMP (Windows bitmap) con la función bmp.

# Dispositivo BMP
bmp("mi_plot")

# Código
plot(rnorm(20))
# Cerramos el dispositivo
dev.off()

Por último, puedes guardar un plot como TIFF (Tagged Image File Format) con la función tiff. Esta función permite establecer el tipo de compresión, que por defecto es "none", con el argumento compression. Otras opciones son "rle", "lzw", "jpeg", "zip", "lzw+p" y "zip+p". Este argumento será ignorado si type = "quartz". Escribe ?tiff para obtener información adicional.

# Abrimos el dispositivo
tiff("mi_plot", compression = "zip")

# Hacemos un gráfico
plot(rnorm(20))

# Cerramos el dispositivo
dev.off()

Una alternativa para guardar gráficos en R desde dispositivos gráficos windows es la función savePlot

savePlot(filename = "Rplot",    # Nombre del archivo a ser guadado
         type = c("wmf", "emf", "png", # Tipo de archivo
                  "jpg", "jpeg", "bmp", 
                  "tif", "tiff", "ps",
                  "eps", "pdf"),
         device = dev.cur(), # Número de dispositivo gráfico a ser exportado
         restoreConsole = TRUE)

Exportar varios gráficos en R a la vez

Cabe mencionar que puedes guardar varios gráficos a la vez en varias páginas. Para los formatos de archivo PDF y SVG, el argumento onefile por defecto es TRUE, por lo que todos los gráficos que crees antes de cerrar el dispositivo gráfico se guardarán en el mismo archivo:

pdf("varios_plots.pdf")

for(i in 1:3) {
    set.seed(i)
    plot(rnorm(20), pch = 16, col = i)
}

dev.off()

Una alternativa es crear varios gráficos dentro de un bucle y nombrar cada uno con un nombre diferente, para que cada archivo se cree en un archivo separado.

nplots <- 2

for(i in 1:nplots) {
    png(paste("Rplot_", i, ".png"))
    set.seed(i)
    plot(rnorm(20), pch = 16, col = i)
    dev.off()
}

La función dev.print para exportar gráficos tal y como se ven

Finalmente, una alternativa para guardar gráficos en R sin la necesidad de usar los dispositivos gráficos es la función dev.print. Esta función permite exportar una imagen en un archivo tal cual se ve, por lo que no se necesita ajustar todos los argumentos de la función correspondiente. Sin embargo, esta no es la mejor práctica para guardar gráficos.

dev.print(pdf,           # Tipo de archivo para la exportación (svg, jpeg, ...)
          "mi_plot.pdf") # Nombre del archivo