2012-02-16 15 views
14

jako nowy użytkownik ggplot2, jestem trochę zagubiony z ilością możliwości i walczę, aby znaleźć w sieci prostą odpowiedź na to, co uważam za prosty problem .Siatka z wielu działek ggplot2, które zostały wykonane w pętli for

Chciałbym wyświetlić wiele wykresów z ggplot2 na tym samym arkuszu, ALE wiedząc, że te wykresy pochodzą z pętli for.

poniższym przykładzie nie kompiluje, to tylko do zilustrowania:

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]) 
}} 

Tutaj p są nadpisywane, ale chciałbym mieć zamiast macierzy lub listy, w których można umieścić wszystkie str jako są one produkowane, to prosta czynność jak

display_in_a_grid(list_of_ggplot_plots) 

Ale o ile starałem, nie byłem w stanie zrobić listę matrycy działki, ani znaleźć funkcję, która przyjmuje tylko jeden argument dla wejścia.

O rzeczy miałem do obejrzenia:

„arrangeGrob” z pakietu gridExtra nie działa, ponieważ wymaga wyraźnej nazwę dla każdej powierzchni (np: P1, P2, P3, ...) jak w http://code.google.com/p/gridextra/wiki/arrangeGrob

„aspekt” metoda ggplot2 nie jest przystosowany do organizowania mojego zestawu danych (lub przeciwnie: P)

byś prosty sposób poradzić sobie z tym?

Dziękuję

François

+1

You są na dobrej drodze. Jeśli rysujesz wiele wykresów słupkowych różnych przypadków, to standardowa metoda ma jeden dział z wieloma aspektami. Prawdopodobnie najlepiej będzie manipulować twoją formą, aby to osiągnąć, zamiast szukać hackowania wielu wątków. –

+0

Dzięki. Zgadzam się, że jest to z pewnością najbardziej sensowne rozwiązanie. Chodzi o to, że dla każdego oddzielnego wątku, chcę również wykonać pewne przetwarzanie danych (zbiorcze małe klasy i pełny test chi kwadrat) i wyświetlić wartość p jako indywidualny tytuł fabuły. Z pewnością możliwe jest uwzględnienie w metodzie facet, ale myślę, że w pewnym momencie będę musiał użyć pętli p. – fstevens

+0

Możesz użyć 'geom_text' do adnotowania każdego aspektu za pomocą wartości p. –

Odpowiedz

26

byłbym skłonny zgodzić się z Richie, ale jeśli chcesz je zorganizować sobie:

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) 

spojrzeć na przykłady na końcu z ?arrangeGrob dla sposobów całkowitego wyeliminowania pętli for:

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

Dzięki. Dużo wyraźniejsze są informacje, które czytałem w podręcznikach pomocy oraz ilustrację funkcji do.call, z których nigdy nie korzystałem. Będę używał tego rozwiązania, jeśli nie uda mi się użyć faset. – fstevens

+3

Twój pierwszy przykład daje identyczne wykresy w przypadku "qplot (c (1:10), c (10: 1) + i, główne = i)" " –