2013-04-23 2 views
2

Предположим, я сюжет что-то вроде этого:Получить текущий объект ggplot

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

Тогда я понял, что я забыл сохранить результат (т.е. ggplot объекта).

Как получить объект ggplot, соответствующий текущему устройству?

Есть ли какая-то функция ggplot, которую я могу отправить cur.dev(), чтобы получить связанный сюжетный объект, или он ушел навсегда?

(Примечание - в этом случае я мог бы сделать p <- .Last.value, но давайте предположим, что я напечатал несколько команд с тех пор, так что это не доступно

Мотивация -. Добавив крюк knitr в автомагически установить fig.cap в название участка (если есть)).

+0

Если ваша цель состоит в том, чтобы получить крючок для 'knitr', я не думаю, что вы хотите так много думать о« cur.dev », но посмотрите, как записываются записи« knitr', используя «оценку» – mnel

+0

Мне удалось получите его работу - используя комбинацию опций 'eval.after = 'fig.cap'' с' fig.cap = cap() ', где функция' cap' извлекает заголовок последнего графика (если есть). перехватчики не работают, потому что если вы измените опцию chunk в hook, она не вступит в силу до следующего фрагмента. –

ответ

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 

Он также не считать каких-либо модификаций/манипуляций с помощью grid или gridExtra (например, grid.arrange/grid.text

+0

aha cheers, я знал, что должна быть функция, просто не знала, как это называется! –

+0

Еще один вопрос - есть ли способ рассказать, является ли 'last_plot' * текущим * сюжетом? например если я 'ggplot (...)' и * then * 'graphics.off()' или 'plot (...)', 'last_plot()' все еще возвращает последний ggplot. Есть ли способ проверить, действительно ли отображаемый график показывался во время вызова функции? –

+0

'ggplot2' хранит последний сюжет, поэтому вы получите последний сюжет, созданный' ggplot' (игнорируя любые манипуляции с сеткой/видовым окном) – mnel

1

Последний объект назначается (и он не должен быть объектом участка) могут быть восстановлены с .Last.value

>require(ggplot2) 
#Loading required package: ggplot2 
ggplot(iris, aes(x=Sepal.Length, y=Petal.Length)) + geom_point() 
gp <- .Last.value 
gp 

Это должно возвращать объекты сюжетные, которые были изменены с помощью сеточных функций до тех пор, как там было задание. Я не уверен, что Тхи s относится к действиям, которые были опосредованы вызовами print.

Смежные вопросы