2010-03-30 64 views
25

内的多个图形我想从使用ggplot图形中的R的函数内产卵几个图形窗口...生成从R函数

testf <- function(a, b) { 
    devAskNewPage(TRUE) 
    qplot(a, b); 
    # grid.newpage(recording = TRUE) 
    dev.new() 
    qplot(a, a+a); 
    # grid.newpage(recording = TRUE) 
    dev.new() 
    qplot(b, b+b); 
} 

library(ggplot2) 

x <- rnorm(50) 
y <- rnorm(50) 
testf(x, y) 

然而,无论dev.new(),也不网格。 newpage()似乎冲刷前面的图。

我知道,在R中,函数通常只产生他们评估的最后一件事情,但我希望更好地理解该过程并学习任何可能的解决方法。

想法?

+1

也许R常问问题7.22 http://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-do-lattice_002ftrellis-graphics-not-work_003f – rcs 2010-03-30 17:48:53

+0

@ rcs您的评论回答了这个问题。把它写成答案,以便可以接受。 – 2010-03-30 18:53:53

+0

rcs评论建议有人不要阅读FAQ;) – Marek 2010-03-30 20:19:01

回答

24

网格基于格和ggplot2的图形函数创建一个图形对象,但不显示它。用于图形对象的print()方法产生的实际显示,即

print(qplot(x, y)) 

解决了这个问题。

参见R FAQ 7.22

+1

你的建议是正确的,但与网格无关 - 这只是一个编程风格决定。 – hadley 2010-03-30 19:16:57

+4

+1:这让我难倒了30分钟。这个陷阱非常重要,值得重现:***“图形对象的print()方法需要产生一个实际的显示。当你在命令行中交互地使用(ggplot2,grid等)函数时,结果是自动打印的,但是在source()或你自己的函数中,你将需要一个明确的print()语句。“*** – smci 2012-05-12 21:45:22

+0

http://cran.r-project.org/doc/FAQ/R-FAQ。 HTML#为什么-DO-lattice_002ftrellis图形 - 不work_003f – marbel 2013-12-04 18:17:48