2012-02-16 34 views
14

là người dùng ggplot2 mới, tôi bị mất một chút với khả năng và đấu tranh để tìm trên mạng một câu trả lời đơn giản cho những gì tôi xem là một vấn đề đơn giản .Lưới của nhiều ô ggplot2 đã được thực hiện trong vòng lặp

Tôi muốn hiển thị nhiều ô từ ggplot2 trên cùng một trang tính, NHƯNG biết rằng các ô này đến từ vòng lặp for.

dụ sau không biên dịch, nó chỉ là để minh họa:

for(i in c(1:n)){         
    for(j in c(1:m)){ 
    .......... # some data production 
    p <- ggplot(df.all) + geom_bar(aes_string(x=class.names[i],fill=var.names[j]) 
}} 

Ở đây, p được ghi đè, nhưng tôi muốn có thay vì một ma trận hoặc một danh sách trong đó tôi có thể đặt tất cả các p như chúng được sản xuất, sau đó một chức năng đơn giản như

display_in_a_grid(list_of_ggplot_plots) 

Nhưng như xa như tôi cố gắng, tôi đã không thể tạo ra một danh sách các ma trận của cốt truyện, không phải để tìm một chức năng mà chỉ mất một đối số cho đầu vào.

Về những điều tôi đã có một cái nhìn tại địa chỉ:

"arrangeGrob" từ gói gridExtra không làm việc vì nó đòi hỏi một cái tên rõ ràng cho mỗi lô (ví dụ: p1, p2, p3, ...) như trong http://code.google.com/p/gridextra/wiki/arrangeGrob

"khía cạnh" phương pháp ggplot2 không phù hợp với việc tổ chức tập hợp dữ liệu của tôi (hoặc ngược lại: p)

bạn sẽ có một cách đơn giản để quản lý này?

Cảm ơn bạn,

François

+1

Bạn đang đi đúng hướng. Nếu bạn đang vẽ rất nhiều biểu đồ thanh của các trường hợp khác nhau, thì một ô duy nhất có nhiều khía cạnh là cách tiếp cận tiêu chuẩn. Nó có lẽ sẽ là tốt nhất để thao tác của bạn thành một hình thức phù hợp để đạt được điều này, thay vì tìm kiếm một hack cho nhiều lô. –

+0

Cảm ơn. Tôi đồng ý điều này chắc chắn là giải pháp hợp lý nhất. Vấn đề là đối với mỗi ô riêng biệt, tôi cũng muốn thực hiện một số xử lý dữ liệu (tổng hợp các lớp nhỏ và kiểm tra chi bình phương hoàn chỉnh) và hiển thị giá trị p như tiêu đề cốt truyện induvidual. Vì vậy, đó là chắc chắn có thể bao gồm trong phương pháp khía cạnh, nhưng tôi nghĩ rằng tôi sẽ phải sử dụng một vòng lặp p anyway tại một số điểm. – fstevens

+0

Bạn có thể sử dụng 'geom_text' để chú thích từng khía cạnh với giá trị p. –

Trả lời

26

Tôi xin được nghiêng để đồng ý với Richie, nhưng nếu bạn muốn sắp xếp chúng mình:

library(gridExtra) 
library(ggplot2) 
p <- list() 
for(i in 1:4){ 
    p[[i]] <- qplot(1:10,10:1,main=i) 
} 
do.call(grid.arrange,p) 

hãy nhìn vào các ví dụ ở cuối của ?arrangeGrob để biết cách loại bỏ hoàn toàn vòng lặp:

plots = lapply(1:5, function(.x) qplot(1:10,rnorm(10),main=paste("plot",.x))) 
require(gridExtra) 
do.call(grid.arrange, plots) 
+0

Cảm ơn. Rõ ràng hơn rất nhiều thông tin mà tôi đã đọc trong sách hướng dẫn trợ giúp và minh họa về hàm do.call mà tôi chưa bao giờ sử dụng. Tôi sẽ sử dụng giải pháp này nếu tôi không sử dụng các khía cạnh. – fstevens

+3

Ví dụ đầu tiên của bạn tạo ra các ô giống nhau trong trường hợp "qplot (c (1:10), c (10: 1) + i, main = i) '" –

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