Non sono sicuro in che modo sfaccettare una funzione dei dati nell'elemento data
di un oggetto ggplot
. Nel seguente esempio giocattolo, quello che voglio fare è qualcosa di simile:ggplot - sfaccettatura in base all'output di funzione
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))
Ma che dà l'errore: Error in layout_base(data, vars, drop = drop) : At least one layer must contain all variables used for facetting
.
posso ottenere il risultato desiderato trasformando il frame di dati:
ggplot(transform(df, z=z%%2), aes(x=x, y=y)) + geom_point() + facet_wrap(~ z)
ma spesso è desiderabile non utilizzare tale trasformazione, ad esempio se sono già stata data un'oggetto ggplot
e voglio aggiungere alcune sfaccettature ad-hoc.
'MyPlot $ data $ zz <- MyPlot $ data $ z %% 2' può essere ancora più semplice. –
@Josh, true, ma si basa sul set di dati già installato. A volte costruisco ggplot senza dati e quindi applico più set di dati. –
È molto simile alla soluzione che ho usato anch'io - 'myplot $ data <- transform (myplot $ data, z = z %% 2)'. Ho ottenuto uno spazio dei nomi bruciato un paio di volte da '% +%' perché alcuni altri pacchetti definivano lo stesso operatore. Mi ci sono voluti * ore * per capirlo. –