2010-03-30 31 views
25

Tôi muốn đẻ trứng nhiều cửa sổ đồ họa từ bên trong một hàm trong R sử dụng đồ họa ggplot ...Tạo nhiều đồ họa từ bên trong một chức năng 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) 

Tuy nhiên, không phải dev.new() cũng không lưới. newpage() dường như xóa âm mưu trước đó.

Tôi biết rằng, trong R, các hàm thường chỉ tạo ra điều cuối cùng mà chúng đánh giá, nhưng tôi muốn hiểu quy trình tốt hơn và để tìm hiểu về mọi cách giải quyết có thể có.

Suy nghĩ?

+1

Có thể R FAQ 7.22 http://cran.r-project.org/doc/FAQ/R-FAQ.html#Why-do-lattice_002ftrellis-graphics-not-work_003f – rcs

+0

@rcs Nhận xét của bạn trả lời câu hỏi. Viết nó như một câu trả lời, để nó có thể được chấp nhận. –

+0

rcs bình luận cho thấy rằng ai đó không đọc một câu hỏi thường gặp;) – Marek

Trả lời

24

Lưới chức năng đồ họa dựa trên mạng và ggplot2 tạo đối tượng đồ thị, nhưng không hiển thị đối tượng. Phương pháp print() cho đối tượng biểu đồ tạo ra hiển thị thực tế, tức là,

print(qplot(x, y)) 

giải quyết vấn đề.

Xem R FAQ 7.22.

+1

Lời khuyên của bạn là chính xác, nhưng nó không thực sự liên quan đến lưới điện - đó chỉ là quyết định kiểu lập trình. – hadley

+4

+1: Điều này khiến tôi bối rối trong 30 phút. Bản ghi này rất quan trọng để tái tạo: *** "Một phương thức print() cho đối tượng đồ thị được yêu cầu để tạo ra một màn hình thực tế. Khi bạn sử dụng các hàm (ggplot2, grid, etc.) tương tác tại dòng lệnh, kết quả được in tự động, nhưng trong nguồn() hoặc bên trong các hàm của riêng bạn, bạn sẽ cần một câu lệnh in rõ ràng(). "*** – smci

+0

http://cran.r-project.org/doc/FAQ/R-FAQ. html # Tại sao-do-lattice_002ftrellis-graphics-not-work_003f – marbel

Các vấn đề liên quan