2010-11-05 9 views
21

En el siguiente ejemplo, ¿cómo configuro ylims para cada una de mis facetas?¿Cómo controlar ylim para una trama facetada con diferentes escalas en ggplot2?

qplot(x, value, data=df, geom=c("smooth")) + facet_grid(variable ~ ., scale="free_y") 

En cada una de las facetas, el eje y tiene un rango diferente de valores y me gustaría a diferentes ylims para cada una de las facetas.

Los yims predeterminados son demasiado largos para la tendencia que deseo ver.

Respuesta

5

Por lo que yo sé que esto no ha sido implementada en ggplot2, todavía. Sin embargo, una solución alternativa (que le proporcionará beneficios que exceden lo que ggplot proporciona automáticamente) es agregar "datos artificiales". Para reducir los ylims simplemente elimine los datos que no quiere trazar (vea en y para un ejemplo).

Aquí se muestra un ejemplo:

vamos a configurar algunos datos ficticios que desea trazar

df <- data.frame(x=rep(seq(1,2,.1),4),f1=factor(rep(c("a","b"),each=22)),f2=factor(rep(c("x","y"),22))) 
df <- within(df,y <- x^2) 

que podríamos parcela usando gráficas de línea

p <- ggplot(df,aes(x,y))+geom_line()+facet_grid(f1~f2,scales="free_y") 
print(p) 

Supongamos que queremos comencemos en -10 en la primera fila y 0 en la segunda fila, así que agregamos un punto en (0, -10) a la gráfica superior izquierda y en (0,0) ot la gráfica inferior izquierda:

ylim <- data.frame(x=rep(0,2),y=c(-10,0),f1=factor(c("a","b")),f2=factor(c("x","y"))) 
dfy <- rbind(df,ylim) 

Ahora limitando el x-escala entre 1 y 2 los puntos añadidos no se representan (se da una advertencia):

p <- ggplot(dfy,aes(x,y))+geom_line()+facet_grid(f1~f2,scales="free_y")+xlim(c(1,2)) 
print(p) 

mismo funcione para extender el margen por encima mediante la adición de puntos con mayor y valores en x valores que se encuentran fuera del rango de xlim.

Esto no funcionará si se quiere reducir el ylim, en cuyo caso subconjuntos de sus datos sería una solución, por ejemplo, para limitar la fila superior entre -10 y 1.5 se puede utilizar:

p <- ggplot(dfy,aes(x,y))+geom_line(subset=.(y < 1.5 | f1 != "a"))+facet_grid(f1~f2,scales="free_y")+xlim(c(1,2)) 
print(p) 
Cuestiones relacionadas