2009-10-07 10 views
8

Tengo un buen diagrama de densidad facet_wrap que he creado con ggplo2. Me gustaría que cada panel tenga etiquetas de ejes xey en lugar de tener solo las etiquetas del eje y a lo largo del lado izquierdo y las etiquetas x en la parte inferior. Lo que tengo en este momento es el siguiente:Mostrando etiquetas de múltiples ejes usando ggplot2 con facet_wrap en R

library(ggplot2) 
myGroups <- sample(c("Mo", "Larry", "Curly"), 100, replace=T) 
myValues <- rnorm(300) 
df <- data.frame(myGroups, myValues) 


p <- ggplot(df) + 
    geom_density(aes(myValues), fill = alpha("#335785", .6)) + 
    facet_wrap(~ myGroups) 
p 

que devuelve:

alt text http://www.cerebralmastication.com/wp-content/uploads/2009/10/3stooges.png

Parece que esto debe ser simple, pero mi Google Fu ha sido demasiado pobre para encontrar una respuesta.

Respuesta

8

Respuesta corta: No puedes hacer eso. Podría tener sentido con 3 gráficos, pero ¿y si tuvieras una gran celosía de 32 gráficos? Eso se vería ruidoso y malo. La filosofía de GGplot es hacer lo correcto con un mínimo de personalización, lo que significa, naturalmente, que no se puede personalizar tanto como otros paquetes.

Respuesta larga: Puede falsificarlo construyendo tres objetos ggplot separados y combinándolos. Pero no es una solución muy general. Aquí hay un código del libro de Hadley que supone que ha creado objetos ggplot a, b y c. Coloca una en la fila superior, con byc en la fila inferior.

grid.newpage() 
pushViewport(viewport(layout=grid.layout(2,2))) 
vplayout<-function(x,y) 
    viewport(layout.pos.row=x,layout.pos.col=y) 
print(a,vp=vplayout(1,1:2)) 
print(b,vp=vplayout(2,1)) 
print(c,vp=vplayout(2,2)) 
+0

Sí que estaba recibiendo "No se supone que hacer que" el ambiente de ggplot. Voy a tratar de implementar el ejemplo que diste. Eso parece razonable. –

+2

Otra cosa que podría intentar, si necesita imágenes con calidad de publicación, es guardar el gráfico en formato PDF o SVG (si no está en Windows), usando ggsave(), y luego edite la imagen resultante usando algo como Inkscape . Podrías cambiar fácilmente la imagen inferior y copiar el eje ... – Harlan

10

Usted puede hacer esto mediante la inclusión de la opción escalas = "libre" en su llamada facet_wrap:

myGroups <- sample(c("Mo", "Larry", "Curly"), 100, replace=T) 
myValues <- rnorm(300) 
df <- data.frame(myGroups, myValues) 


p <- ggplot(df) + 
    geom_density(aes(myValues), fill = alpha("#335785", .6)) + 
    facet_wrap(~ myGroups, scales="free") 
p 
Cuestiones relacionadas