¿Cómo guardar un diagtwig como imagen en el disco?

Tracé 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 viendo la ttwig en mi monitor y me gustaría guardarla tal 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. Una imagen se generará en el futuro en mi script, ¿cómo la guardo en el disco?

Para guardar un diagtwig, debe hacer lo siguiente:

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

Un código de ejemplo para guardar el trazado 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 tener un aspecto diferente en el disco para el mismo trazado directamente trazado en su pantalla, por ejemplo, si ha cambiado el tamaño de la ventana en pantalla.


Tenga en cuenta que si su trazado está formado por lattice o ggplot2 , debe imprimir explícitamente el trazado. Vea esta respuesta que explica esto con más detalle y también enlaces a las preguntas frecuentes de R: qplot de ggplot no se ejecuta en el origen


2. Actualmente estoy buscando un argumento en mi pantalla y quiero copiarlo 'tal cual' en el disco.

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

Esto debería copiar la imagen a la perfección, respetando cualquier redimensionamiento que haya hecho a la ventana interactiva. Puede, como en la primera parte de esta respuesta, reemplazar el pdf con otros tipos de archivos como png .

Si desea seguir viendo la ttwig 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 trazado en R, use graphics.off() para cerrar todas las ventanas de trazado.

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

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

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

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. Están todos enumerados juntos en las páginas de ayuda.

Para la primera pregunta, considero que dev.print es el mejor cuando se trabaja de forma interactiva. Primero, configura su diagtwig visualmente y cuando está contento con lo que ve, puede pedirle a R que guarde el gráfico actual en el disco

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

Puede reemplazar el pdf con otros formatos, como png .

Esto copiará la imagen exactamente como la ve en la pantalla. El problema con dev.copy es que la imagen suele ser diferente y no recuerda el tamaño de la ventana y la relación de aspecto: obliga a que la ttwig sea cuadrada de forma predeterminada.

Para la segunda pregunta, (como otros ya han respondido), debe dirigir la salida al disco antes de ejecutar los 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 usa R Studio http://sofes.miximages.com/r/strong (la mejor respuesta), las ventanas con plots no se abrirán, solo .png, * bmp o * .pdf archivos serán creados Esto es conveniente en cálculos masivos, ya que R solo puede manejar un número limitado de ventanas gráficas.

Sin embargo, si desea ver las ttwigs y también las ha guardado, llame a savePlot(filename, type) después de dibujar las savePlot(filename, type) y la ventana que las contiene está activa.

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

Para agregar a estas respuestas, si tiene un script R que contiene llamadas que generan ttwigs en la pantalla (el dispositivo nativo), entonces todas pueden guardarse en un archivo pdf (el dispositivo predeterminado para un shell no interactivo) “Rplots.pdf “(el nombre predeterminado) al redirigir la secuencia de comandos a R desde el terminal (suponiendo que esté ejecutando Linux o OS X), por ejemplo:

 R < myscript.R --no-save 

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

En algunos casos, uno quiere guardar e imprimir un argumento 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 utilizar quote ; de lo contrario, la llamada a la plot(x) se ejecuta en el entorno global y NULL se pasa a las basesave() .

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