¿Cómo establecer límites para ejes en gráficas ggplot2 R?


Trazo lo siguiente:

library(ggplot2)    

carrots <- data.frame(length = rnorm(500000, 10000, 10000))
cukes <- data.frame(length = rnorm(50000, 10000, 20000))
carrots$veg <- 'carrot'
cukes$veg <- 'cuke'
vegLengths <- rbind(carrots, cukes)

ggplot(vegLengths, aes(length, fill = veg)) +
 geom_density(alpha = 0.2)

Ahora digamos que solo quiero trazar la región entre x=-5000 y 5000, en lugar de todo el rango.

¿Cómo puedo hacer eso?

 279
Author: zx8754, 2010-08-31

2 answers

Básicamente tienes dos opciones

scale_x_continuous(limits = c(-5000, 5000))

O

coord_cartesian(xlim = c(-5000, 5000)) 

Donde el primero elimina todos los puntos de datos fuera del rango dado y el segundo solo ajusta el área visible. En la mayoría de los casos no verías la diferencia, pero si ajustas algo a los datos probablemente cambiaría los valores ajustados.

También puede usar la función abreviada xlim (o ylim), que al igual que la primera opción elimina los puntos de datos fuera del rango dado:

+ xlim(-5000, 5000)

Para más información revise la descripción de coord_cartesian.

La hoja de cheatsheet de RStudio para ggplot2 deja esto bastante claro visualmente. Aquí hay una pequeña sección de esa hoja de cheatsheet:

introduzca la descripción de la imagen aquí

Distribuido bajo CC BY.

 483
Author: midtiby,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-08 11:37:26

Nota rápida: si también estás usando coord_flip() para voltear los ejes x e y, no podrás establecer límites de rango usando coord_cartesian() porque esas dos funciones son exclusivas (ver aquí).

Afortunadamente, esta es una solución fácil; establezca sus límites dentro de coord_flip() de la siguiente manera:

p + coord_flip(ylim = c(3,5), xlim = c(100, 400))

Esto solo altera el rango visible (es decir, no elimina los puntos de datos).

 26
Author: Bill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-02 18:43:57