Limite los ejes de ggplot2 sin eliminar datos (fuera de los límites): zoom

106

Si especifica límites de eje en ggplot, se eliminan los puntos periféricos. Esto está bien para los puntos, pero es posible que desee trazar líneas que se crucen con el rango especificado, pero los métodos rangeo ggplot las xlim/ylimeliminan. ¿Existe otra forma de especificar el rango del eje de la trama sin eliminar los datos periféricos?

p.ej

require(ggplot2)
d = data.frame(x=c(1,4,7,2,9,7), y=c(2,5,4,10,5,3), grp=c('a','a','b','b','c','c'))
ggplot(d, aes(x, y, group=grp)) + geom_line()
ggplot(d, aes(x, y, group=grp)) + geom_line() + scale_y_continuous(limits=c(0,7))
ggplot(d, aes(x, y, group=grp)) + geom_line() + ylim(0,7)
geoteoria
fuente

Respuestas:

168

Hadley explica esto en las págs. 99; 133 de su libro ggplot2 (1ª edición) , o págs. 160-161 si tiene la segunda edición .

El problema es que, como usted dice, limitsdentro de la escala o configuración ylim()hace que los datos se descarten, ya que están restringiendo los datos. Para un verdadero zoom (mantener todos los datos), debe establecer los límites dentro del sistema de coordenadas cartesianas (u otros sistemas de coordenadas https://ggplot2.tidyverse.org/reference/#section-coordinate-systems ). Para obtener más información, consulte: http://docs.ggplot2.org/current/coord_cartesian.html

ggplot(d, aes(x, y, group=grp)) + 
    geom_line() + 
    coord_cartesian(ylim=c(0, 7))

ingrese la descripción de la imagen aquí

Tyler Rinker
fuente
2
¿Qué pasa si coord_cartesian no es una opción porque yo lo uso geom_boxplot?
Everettss
3
coord_cartesiansigue siendo una opción con geom_boxplotu otras geoms.
eipi10
Sí, pero no puedo averiguar cómo hacer diagramas de caja horizontales ya que eso requiere coord_flipy no puede tener dos coords.
jtr13
2
No importa, puede configurar los ylim en coord_fliplugar de coord_cartesianen ese caso.
jtr13