varias lineas hacer guardar graficos grafico graficas figura exportar dispersion como barplot r plot ggplot2 lattice r-faq

lineas - plot en r



¿Cómo guardar un gráfico como imagen en el disco? (11)

En algunos casos, uno quiere guardar e imprimir un gráfico base r. Pasé un poco de tiempo y se me ocurrió esta función de utilidad:

x = 1:10 basesave = function(expr, filename, print=T) { #extension exten = stringr::str_match(filename, "//.(//w+)$")[, 2] switch(exten, png = { png(filename) eval(expr, envir = parent.frame()) dev.off() }, {stop("filetype not recognized")}) #print? if (print) eval(expr, envir = parent.frame()) invisible(NULL) } #plots, but doesn''t save plot(x) #saves, but doesn''t plot png("test.png") plot(x) dev.off() #both basesave(quote(plot(x)), "test.png") #works with pipe too quote(plot(x)) %>% basesave("test.png")

Tenga en cuenta que se debe usar quote , de lo contrario, la llamada plot(x) se ejecuta en el entorno global y NULL se pasa a basesave() .

Trazo una regresión lineal simple usando R. Me gustaría guardar esa imagen como PNG o JPEG, ¿es posible hacerlo automáticamente? (a través del código)

Hay dos preguntas diferentes: primero, ya estoy mirando la trama en mi monitor y me gustaría guardarlo como está. En segundo lugar, aún no he generado el gráfico, pero me gustaría guardarlo directamente en el disco cuando ejecuto mi código de trazado.


Hay dos preguntas estrechamente relacionadas y una respuesta para cada una.

1. Se generará una imagen en el futuro en mi script, ¿cómo la guardo en el disco?

Para guardar una parcela, debes hacer lo siguiente:

  1. Abra un dispositivo usando png() , bmp() , pdf() o similar
  2. Traza tu modelo
  3. Cierre el dispositivo usando dev.off()

Algún código de ejemplo para guardar la trama en un archivo png :

fit <- lm(some ~ model) png(filename="your/file/location/name.png") plot(fit) dev.off()

Esto se describe en la página de ayuda (combinada) para los formatos gráficos ?png ?bmp ?jpeg y ?tiff , así como en la página de ayuda separada para ?pdf .

Sin embargo, tenga en cuenta que la imagen puede verse diferente en el disco al mismo trazado que se traza directamente en su pantalla, por ejemplo, si ha cambiado el tamaño de la ventana en pantalla.

Tenga en cuenta que si su trama se realiza mediante lattice o ggplot2 , tiene que imprimir explícitamente la trama. Vea esta respuesta que explica esto con más detalle y también los enlaces a las preguntas más frecuentes de R: qgot de ggplot no se ejecuta en la fuente

2. Actualmente estoy viendo un gráfico en mi pantalla y quiero copiarlo ''como está'' al disco.

dev.print(pdf, ''filename.pdf'')

Esto debería copiar la imagen perfectamente, respetando cualquier cambio de tamaño que haya hecho en la ventana interactiva. Puede, como en la primera parte de esta respuesta, reemplazar el pdf con otros tipos de archivos como png .


Me gusta esto

png(''filename.png'') # make plot dev.off()

o esto

# sometimes plots do better in vector graphics svg(''filename.svg'') # make plot dev.off()

o esto

pdf(''filename.pdf'') # make plot dev.off()

Y probablemente otros también. Todos están listados juntos en las páginas de ayuda.


Para agregar a estas respuestas, si tiene un script R que contiene llamadas que generan gráficos en la pantalla (el dispositivo nativo), todos estos se pueden guardar en un archivo pdf (el dispositivo predeterminado para un shell no interactivo) "Rplots.pdf "(el nombre predeterminado) redireccionando el script a R desde el terminal (asumiendo que está ejecutando Linux u OS X), por ejemplo:

R < myscript.R --no-save

Esto podría ser convertido a jpg / png según sea necesario


Para la primera pregunta, creo que dev.print es el mejor cuando se trabaja de forma interactiva. Primero, configura la trama visualmente y cuando esté satisfecho con lo que ve, puede pedirle a R que guarde la trama actual en el disco.

dev.print(pdf, file="filename.pdf");

Puede reemplazar pdf con otros formatos como png .

Esto copiará la imagen exactamente como la ves en la pantalla. El problema con dev.copy es que la imagen es a menudo diferente y no recuerda el tamaño de la ventana y la relación de aspecto, lo que obliga a que la trama sea cuadrada por defecto.

Para la segunda pregunta, (como otros ya han respondido), debe dirigir la salida al disco antes de ejecutar sus comandos de trazado.

pdf(''filename.pdf'') plot( yourdata ) points (some_more_data) dev.off() # to complete the writing process and return output to your monitor


Si abre un dispositivo utilizando png() , bmp() , pdf() etc. como lo sugiere Andrie (la mejor respuesta), las ventanas con gráficos no se abrirán, solo * .png, * bmp o * .pdf Se crearán archivos. Esto es conveniente en cálculos masivos, ya que R puede manejar solo un número limitado de ventanas gráficas.

Sin embargo, si desea ver los gráficos y también tenerlos guardados, llame a savePlot(filename, type) después de dibujar los gráficos y la ventana que los contiene está activa.


Si desea seguir viendo el gráfico en R, otra opción es usar dev.copy :

X11 () plot (x,y) dev.copy(jpeg,filename="plot.jpg"); dev.off ();

Si llega a un montón de demasiadas ventanas de trama en R, use graphics.off() para cerrar todas las ventanas de trama.


Si usa ggplot2 la forma preferida de guardar es usar ggsave . Primero tienes que trazar, después de crear la trama que llamas ggsave :

ggplot(...) ggsave("plot.png")

El formato de la imagen está determinado por la extensión que elija para el nombre de archivo. Se pueden pasar parámetros adicionales a ggsave , en particular width , height y dpi .


Si usa R Studio http://rstudio.org/ hay un menú especial para guardar su trazado como el formato que desee y en la resolución que elija.


dev.copy(png,''path/pngFile.png'') plot(YData ~ XData, data = mydata) dev.off()


plotpath<- file.path(path, "PLOT_name",paste("plot_",file,".png",sep="")) png(filename=plotpath) plot(x,y, main= file) dev.off()