Guarda un diagtwig en un objeto

En ggplot2 , uno puede guardar fácilmente un gráfico en un objeto R.

 p = ggplot(...) + geom_point() # does not display the graph p # displays the graph 

El plot función estándar produce el gráfico como una función vacía y devuelve NULL.

 p = plot(1:10) # displays the graph p # NULL 

¿Es posible guardar un gráfico creado por un gráfico en un objeto?

los gráficos base dibujan directamente en un dispositivo.

Podrías usar

1- recordPlot

2- el paquete gridGraphics recientemente introducido, para convertir gráficos base a su equivalente de red

Aquí hay un ejemplo mínimo,

 plot(1:10) p <- recordPlot() plot.new() ## clean up device p # redraw ## grab the scene as a grid object library(gridGraphics) library(grid) grid.echo() a <- grid.grab() ## draw it, changes optional grid.newpage() a <- editGrob(a, vp=viewport(width=unit(2,"in")), gp=gpar(fontsize=10)) grid.draw(a) 

Puede utilizar la función de vinculación activa del paquete pryr si no desea cambiar directamente los valores del objeto creado.

 library(pryr) a % 

Cada vez que escriba a en la consola, el gráfico se reimprimirá en la pantalla. El operador % volverá a ejecutar el script cada vez (en el caso de un gráfico, creo que no es un problema). Así que, esencialmente, cada vez que use a código, se volverá a ejecutar, lo que resultará en un gráfico que, por supuesto, puede manipular (sobreponer otro gráfico en la parte superior) o guardar usando png por ejemplo. Sin embargo, no se almacenará ningún valor en a . El valor seguirá siendo NULL.

No sé si lo anterior es lo que está buscando, pero podría ser una solución aceptable.

Llego muy tarde a esto, pero fue la primera pregunta que apareció cuando busqué la pregunta. Por lo tanto, me gustaría agregar mi solución para los futuros espectadores que se crucen con la pregunta.

Lo resolví usando una función en lugar de un objeto. Por ejemplo, supongamos que queremos comparar dos distribuciones beta con diferentes parámetros. Podemos ejecutar:

 z1<-rbeta(10000,5,5) z2<-rbeta(10000,20,20) plotit<-function(vector,alpha,beta){ plot(density(vector),xlim=c(0,1)) abline(v=alpha/(alpha+beta),lty="longdash") } 

Y guarde las ttwigs como funciones en lugar de objetos.

 z.plot1<-function(){plotit(z1,5,5)} z.plot2<-function(){plotit(z2,20,20)} 

A continuación, podemos llamar a cada plot como queramos simplemente llamando a las dos plots como funciones en lugar de objetos.

 z.plot1() 

traza la primera plot y

 z.plot2() 

ttwig el segundo.

¡Espero que eso ayude a alguien que tropiece con esto más tarde!