No estoy seguro de cómo facetar por una función de los datos en el elemento data
de un objeto ggplot
. En el siguiente ejemplo de juguete, lo que quiero hacer es algo como esto:ggplot - faceta por salida de función
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))
Pero eso da el error: Error in layout_base(data, vars, drop = drop) : At least one layer must contain all variables used for facetting
.
que puede lograr el resultado deseado mediante la transformación de la trama de datos:
ggplot(transform(df, z=z%%2), aes(x=x, y=y)) + geom_point() + facet_wrap(~ z)
pero a menudo es deseable no usar una transformación de este tipo, por ejemplo si ya han dado un objeto ggplot
y quiero agregue un poco de faceta ad hoc.
'myplot $ $ zz datos <- myplot $ z $ %% datos 2' puede ser aún más sencillo. –
@Josh, cierto, pero depende del conjunto de datos que ya se está instalando. Algunas veces construyo ggplots sin datos y luego aplico múltiples conjuntos de datos. –
Es notablemente como la solución que he estado usando también - 'myplot $ data <- transform (myplot $ data, z = z %% 2)'. Tengo un espacio de nombres quemado un par de veces por '% +%' porque algún otro paquete definió el mismo operador. Me tomó * horas * para resolverlo. –