2012-10-04 15 views
6

Me gustaría crear una gráfica con facetas usando ggplot2 en la que se fijará el límite mínimo del eje y (digamos a 0) y el límite máximo estará determinado por los datos en la faceta (como ocurre cuando scales="free_y". Tenía la esperanza de que algo como lo siguiente funcionaría, pero no hubo suerte:¿Cree límites de eje parcialmente fijos y sin piezas en las facetas con ggplot?

library(plyr) 
library(ggplot2) 

#Create the underlying data 
l <- gl(2, 10, 20, labels=letters[1:2]) 
x <- rep(1:10, 2) 
y <- c(runif(10), runif(10)*100) 
df <- data.frame(l=l, x=x, y=y) 

#Create a separate data frame to define axis limits 
dfLim <- ddply(df, .(l), function(y) max(y$y)) 
names(dfLim)[2] <- "yMax" 
dfLim$yMin <- 0 

#Create a plot that works, but has totally free scales 
p <- ggplot(df, aes(x=x, y=y)) + geom_point() + facet_wrap(~l, scales="free_y") 
#Add y limits defined by the limits dataframe 
p + ylim(dfLim$yMin, dfLim$yMax) 

no es demasiado sorprendente para mí que esto genera un error (length(lims) == 2 is not TRUE) pero no puedo pensar en una estrategia para empezar a trabajar en este problema.

Respuesta

7

En su caso, cualquiera de los siguientes funcionará:

p + expand_limits(y=0) 

p + aes(ymin=0) 
Cuestiones relacionadas