2010-08-31 39 views
249

que trazar el siguiente:Cómo establecer los límites para los ejes en ggplot2 R plots?

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 dicen que sólo desea trazar la región entre x=-5000 a 5000, en lugar de toda la gama.

¿Cómo puedo hacer eso?

Respuesta

418

Básicamente, usted tiene dos opciones

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

o

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

Cuando la primera elimina todos los puntos de datos fuera del rango dado y la segunda sólo se ajusta el área visible. En la mayoría de los casos, no verá la diferencia, pero si ajusta algo a los datos, probablemente cambiaría los valores ajustados.

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

+ xlim(-5000, 5000) 

Para obtener más información consulte la descripción del coord_cartesian.

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

enter image description here

distribuido bajo CC BY.

+12

ahora también hay 'biblioteca (escalas); ... + scale_x_continuous (limits = c (-5000, 5000), oob = squish) '(el valor predeterminado es' oob = censor'); ver '? squish','? censor': https://groups.google.com/forum/#!topic/ggplot2/AsJ6xpmR9tU –

+5

NB. esto podría ser problemático si se trata de líneas/polígonos donde algunos vértices están fuera de los límites, ya que todo el objeto se elimina de la gráfica – geotheory

+0

@geotheory: ¿eso también es cierto para el enfoque 'coord_cartesian'? –

18

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

Afortunadamente, esta es una solución fácil; establecer sus límites dentro coord_flip() así:

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

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

Cuestiones relacionadas