2012-09-04 16 views
8

Nie jestem pewien, jak aspekt przez funkcję danych w obiekcie data obiektu ggplot. W poniższym przykładzie zabawek, co chcę zrobić, to coś takiego:ggplot - aspekt przez wynik funkcji

df <- data.frame(x=1:8, y=runif(8), z=8:1) 
ggplot(df, aes(x=x, y=y)) + geom_point() + facet_wrap(~ (z %% 2)) 

Ale to daje błąd: Error in layout_base(data, vars, drop = drop) : At least one layer must contain all variables used for facetting.

mogę osiągnąć pożądany rezultat poprzez przekształcenie ramkę danych:

ggplot(transform(df, z=z%%2), aes(x=x, y=y)) + geom_point() + facet_wrap(~ z) 

ale często jest to pożądane, aby nie używać takiej transformacji, na przykład jeśli ja już nadano ggplot przedmiot i chcę dodaj do niego fragmenty ad-hoc.

Odpowiedz

3

brzmi to dla mnie znajomo, ale nigdy nie udało mi się tego naprawić - myślę, że obsługa zmiennych aspektu jest po prostu słabsza od estetycznej obsługi zmiennych.

Adresowanie wymagań użytkownika root - do aspektu ad-hoc istniejącego ggplot; pamiętać, że można zastąpić hurtowego Ustaw (master) dane istniejącego R ggplot - na przykład

myplot %+% transform(myplot$data, z=z%%2) 
+1

'myplot $ dane $ zz <- myplot $ dane $ z %% 2' może być jeszcze bardziej proste. –

+0

@Josh, prawda, ale polega na już zainstalowanym zbiorze danych. Czasami buduję ggplots bez danych, a następnie stosuję wiele zestawów danych. –

+0

To zadziwiające rozwiązanie, z którego korzystałem - 'myplot $ data <- transform (myplot $ data, z = z %% 2). Mam parę spacji parę razy o '% +%', ponieważ jakiś inny pakiet zdefiniował tego samego operatora. Zajęło mi * godziny *, aby to zrozumieć. –

Powiązane problemy