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.
'myplot $ dane $ zz <- myplot $ dane $ z %% 2' może być jeszcze bardziej proste. –
@Josh, prawda, ale polega na już zainstalowanym zbiorze danych. Czasami buduję ggplots bez danych, a następnie stosuję wiele zestawów danych. –
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ć. –