2

假设我绘制这样的图:

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

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

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

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

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

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

4

2 回答 2

9

你在追求last_plot

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

请注意,它是最后修改 创建的图

set_last_plot 是相关代码(见源码

重要的是,创建修改或渲染 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

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

于 2013-04-23T03:15:39.147 回答
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电话调解的操作是否正确。

于 2013-04-23T05:06:39.787 回答