2012-09-04 24 views
8

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.

Respuesta

3

esto me suena familiar, pero nunca logré solucionarlo, creo que el manejo variable de facetas es menos poderoso que el manejo de variables estéticas.

Abordar su requisito de raíz: para adaptar una faceta a un ggplot existente; en cuenta que puede reemplazar por mayor de la que los datos (maestro) de un R ggplot existentes - por ejemplo

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

'myplot $ $ zz datos <- myplot $ z $ %% datos 2' puede ser aún más sencillo. –

+0

@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. –

+0

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. –

Cuestiones relacionadas