2010-03-30 61 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