¿Cómo establecer límites para los ejes en las parcelas ggplot2 R?

358

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=-5000a 5000, en lugar del rango completo.

¿Cómo puedo hacer eso?

David B
fuente

Respuestas:

585

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ía la diferencia, pero si ajusta 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 consulte la descripción de coord_cartesian.

La hoja de trucos de RStudio loggplot2 deja bastante claro visualmente. Aquí hay una pequeña sección de esa hoja de trucos:

ingrese la descripción de la imagen aquí

Distribuido bajo CC BY .

midtiby
fuente
16
también hay ahora library(scales); ... + scale_x_continuous(limits = c(-5000, 5000), oob=squish)(el valor predeterminado es oob=censor); ver ?squish, ?censor: groups.google.com/forum/#!topic/ggplot2/AsJ6xpmR9tU
Ben Bolker
55
NÓTESE BIEN. esto podría ser problemático si usted está tratando con líneas / polígonos donde algunos vértices están fuera de los límites, ya que todo el objeto se elimina de la trama
geotheory
1
@geotheory: ¿eso también es cierto para el coord_cartesianenfoque?
Nick Stauner
1
No, debería haber sido más específico, solo el primer método
geoterapia
En la práctica, para fines de 'impresión', coord_cartesian(xlim = probablemente también necesite restablecer ylim, y restablecer la etiqueta y los saltos de cuadrícula.
PatrickT
44

Nota rápida: si también está utilizando coord_flip()para voltear el eje xy el eje y, no podrá establecer límites de rango coord_cartesian()porque esas dos funciones son exclusivas (consulte aquí ).

Afortunadamente, esta es una solución fácil; establece tus límites dentro de esta coord_flip()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).

Cuenta
fuente
Tengo una pregunta similar pero más difícil publicada aquí stackoverflow.com/questions/61531149/… sobre cómo limitar un LADO SOLO
IVIM