establecer solo el límite inferior de un límite para ggplot

81

¿Es posible establecer solo el límite inferior de un límite para escala continua? Quiero hacer que todas mis gráficas se basen en 0 sin necesidad de especificar el límite superior.

p.ej

+ scale_y_continuous(minlim=0)
marca
fuente

Respuestas:

116

Puedes usar expand_limits

ggplot(mtcars, aes(wt, mpg)) + geom_point() + expand_limits(y=0)

Aquí hay una comparación de los dos:

  • sin expand_limits

  • con expand_limits

A partir de la versión 1.0.0 de ggplot2, puede especificar solo un límite y hacer que el otro sea como se determinaría normalmente estableciendo ese segundo límite en NA. Este enfoque permitirá tanto la expansión como el truncamiento del rango del eje.

ggplot(mtcars, aes(wt, mpg)) + geom_point() +
  scale_y_continuous(limits = c(0, NA))

especificarlo a través de ylim(c(0, NA))da una cifra idéntica.

Brian Diggs
fuente
@PatrickT ¿Quiso decir eso como un comentario para stackoverflow.com/q/27028825/892313 ?
Brian Diggs
Exactamente lo que estaba buscando. Gracias
Veera
12

¿Qué tal usar aes(ymin=0), como en:

ggplot(mtcars, aes(wt, mpg)) + geom_point() + aes(ymin=0)
Josh O'Brien
fuente
7
Esto anula el ymin para geom_errorbar, etc .; expand_limits () parece más seguro.
Mark
Esto no es universal, ya geom_densityque me da Error: stat_bin() must not be used with a y aesthetico cuando se coloca dentro de geom_density, Warning: Ignoring unknown aesthetics: ymin(este último es completamente esperado)
PatrickT
7

También puede probar el siguiente código que le dará el eje y mínimo en cero y también sin el espacio adicional entre el eje x y el valor y mínimo.

scale_y_continuous(limits = c(0, NA), expand = c(0,0))
WANNISA RITMAHAN
fuente
1
¿Hay alguna forma de hacer esto con coord_cartesian()?
randy
-1

No creo que puedas hacer esto directamente. Pero como solución alternativa, puede imitar la forma en que ggplot2 determina el límite superior:

scale_y_continuous(limits=c(0, max(mydata$y) * 1.1))
bdemarest
fuente