R:保存一个对象的情节

ggplot2 ,可以很容易地将graphics保存到R对象中。

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

标准函数plot产生的graphics作为一个void函数(我认为)并返回NULL。

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

是否可以保存由对象创build的graphics?

基础graphics直接在设备上绘制。

你可以使用

1- recordPlot

2-最近推出的gridGraphics软件包 ,将基本graphics转换为相应的网格

这是一个简单的例子,

 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) 

如果您不想直接更改创build的对象的值,则可以使用pryr包的活动绑定function。

 library(pryr) a %<a-% plot(1:10,1:10) 

每当您在控制台上键入agraphics时,graphics将被重新显示在屏幕上。 %<a-%操作符每次都会重新运行脚本(如果是一个图表,我认为这不是问题)。 所以基本上每次你使用的代码将会重新运行,导致你的graphics当然你可以操纵(叠加在另一个图上)或保存使用png的例子。 没有价值本身将被存储在a然而。 该值将仍然是NULL。

我不知道以上是你在找什么,但它可能是一个可以接受的解决scheme。

我对这个问题已经很晚了,但这是我search这个问题时出现的第一个问题。 所以我想为未来的观众添加我的解决scheme。

我通过使用函数而不是对象来解决这个问题。 例如,假设我们想比较两个不同参数的beta分布。 我们可以运行:

 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") } 

并保存作为function,而不是对象的情节。

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

接下来,我们可以通过简单地将这两个图作为函数而不是对象来调用每个图。

 z.plot1() 

绘制第一个情节和

 z.plot2() 

情节第二。

希望能帮助那些稍后绊倒人的人!