获取当前的ggplot对象

时间:2013-04-23 03:12:53

标签: r ggplot2

假设我画了这样的事情:

ggplot(iris, aes(x=Sepal.Length, y=Petal.Length)) + geom_point()

然后我意识到我忘记存储结果(即ggplot对象)。

如何检索与当前设备对应的ggplot对象?

是否有一些ggplot函数我可以将cur.dev()输入以检索关联的绘图对象,还是它永远消失了?

(注意 - 在这种情况下,我可以p <- .Last.value,但我们假设我从那时起输入了一些命令,因此无法使用。

动机 - 为knitr添加一个钩子,以自动将fig.cap设置为图表的标题(如果有的话)。“

2 个答案:

答案 0 :(得分:9)

您在last_plot

之后

它检索要修改或创建的最后一个绘图,并由ggsave

使用

请注意,这是最后一个已修改 创建的

set_last_plot是相关代码(请参阅source

重要的是要注意,创建修改或渲染ggplot对象将设置最后一个绘图。

ggplot(iris, aes(x=Sepal.Length, y=Petal.Length)) + geom_point()
f <- last_plot()
# will return the iris plot
p <- ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point()
last_plot()
# will return p
f
last_plot() 
# is now f

它也不会计算使用gridgridExtra的任何修改/操纵(例如grid.arrange / grid.text

答案 1 :(得分:1)

可以使用.Last.value

恢复分配的最后一个对象(并且它不需要是绘图对象)
>require(ggplot2)
#Loading required package: ggplot2
 ggplot(iris, aes(x=Sepal.Length, y=Petal.Length)) + geom_point()
 gp <- .Last.value
 gp

只要有赋值,这应返回已由网格函数修改的绘图对象。我不确定通过print调用调解的行为是否属实。