Forzar el origen para comenzar en 0

139

¿Cómo puedo configurar el origen / intercepción del eje y y el eje x en ggplot2?

La línea del eje x debe estar exactamente en y=Z.

Con Z=0u otro valor dado.

Jonas Stein
fuente

Respuestas:

199

xlimy ylimno lo cortes aquí. Es necesario utilizar expand_limits, scale_x_continuousy scale_y_continuous. Tratar:

df <- data.frame(x = 1:5, y = 1:5)
p <- ggplot(df, aes(x, y)) + geom_point()
p <- p + expand_limits(x = 0, y = 0)
p # not what you are looking for

ingrese la descripción de la imagen aquí

p + scale_x_continuous(expand = c(0, 0)) + scale_y_continuous(expand = c(0, 0))

ingrese la descripción de la imagen aquí

Es posible que deba ajustar un poco las cosas para asegurarse de que los puntos no se corten (consulte, por ejemplo, el punto en x = 5y y = 5.

A5C1D2H2I1M1N2O1R2T1
fuente
29
También necesitaba especificar límites: de scale_x_continuous(expand = c(0, 0), limits = c(0,5))alguna manera, sin eso no funcionó
JelenaČuklina
3
Creo que una pieza más puede ser útil, que es usar algo así expand=expand_scale(mult=c(0,0.1))para que aún consigas el relleno en los extremos superiores: stackoverflow.com/a/59056123/8400969
Michael
4

Simplemente agréguelos a su ggplot:

+ scale_x_continuous(expand = c(0, 0), limits = c(0, NA)) + 
  scale_y_continuous(expand = c(0, 0), limits = c(0, NA))

Ejemplo

df <- data.frame(x = 1:5, y = 1:5)
p <- ggplot(df, aes(x, y)) + geom_point()
p <- p + expand_limits(x = 0, y = 0)
p # not what you are looking for


p + scale_x_continuous(expand = c(0, 0), limits = c(0,NA)) + 
  scale_y_continuous(expand = c(0, 0), limits = c(0, NA))

ingrese la descripción de la imagen aquí

Por último, tenga mucho cuidado de no excluir involuntariamente los datos de su gráfico . Por ejemplo, a position = 'dodge'podría hacer que una barra quede completamente fuera del gráfico (por ejemplo, si su valor es cero y comienza el eje en cero), por lo que es posible que no lo vea y ni siquiera sepa que está allí. Recomiendo trazar los datos completos primero, inspeccionar, luego usar el consejo anterior para mejorar la estética de la trama.

stevec
fuente
¿También es posible construir esto en un nuevo tema de ggplot?
Bolle
@Bolle No estoy seguro, pero también estoy interesado en averiguarlo, puede hacer una pregunta por separado y hacer un enlace aquí
stevec
Enlace aquí para referencia futura
stevec