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:
- Abra un dispositivo usando
png()
,bmp()
,pdf()
o similar - Traza tu modelo
- 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()