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)
每当您在控制台上键入a
graphics时,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()
情节第二。
希望能帮助那些稍后绊倒人的人!