2011-11-23 27 views
8

Disculpa que este ejemplo no sea tan bueno, pero resalta el punto.geom_smooth() - y escalar el eje Y, perder datos del suavizado

mtcars$tran <- factor(mtcars$am, labels=c("Man","Aut")) 
ggplot(mtcars, aes(x=hp, y= mpg, group=tran)) + geom_smooth(aes(colour=tran)) 
ggplot(mtcars, aes(x=hp, y= mpg, group=tran)) + geom_point(aes(colour=tran)) 
ggplot(mtcars, aes(x=hp, y= mpg, group=tran)) + geom_point(aes(colour=tran)) + geom_smooth(aes(colour=tran)) 
ggplot(mtcars, aes(x=hp, y= mpg, group=tran)) + geom_smooth(aes(colour=tran)) + scale_y_continuous(limits=c(12,60)) 

Lo que quiero hacer es dibujar una curva suavizada, pero 'zoom' mediante la restricción de la escala del eje y. Sin embargo, parece que ggplot excluye cualquier dato que esté fuera de los límites de la escala al calcular las curvas suavizadas. Sí, parece lógico, pero ¿cómo vería lo que quiero ver? En mis datos reales, los valores (crudos) de y oscilan entre 5 y 14, pero las curvas suavizadas se encuentran completamente entre 7 y 9. Por lo tanto, hay un montón de espacio vacío en la parte superior. Cuando lo configuro en c (7,9) ya no usa puntos fuera de ese rango para calcular la curva suave, y por lo tanto, obtengo una curva diferente.

No puedo proporcionar por datos pero puede ver esto en este ejemplo. Vea cómo en el último diagrama, se dejan dos puntos y la última mitad de la curva "Hombre" no es la misma que en el gráfico original.

Pregunta

Si scale_y_continuous limita los valores de datos que se utilizan para construir la curva suavizada (lógico), ¿cómo se puede dibujar la curva utilizando todos los datos y luego 'zoom' en él (wrt la eje y).

Avísame si no está claro.

Gracias

+0

El zoom por defecto de 'geom_smooth' va a cambiar, por lo que entiendo, en la próxima versión (que debe estar fuera alrededor de la Navidad/Nueva Años). Vea aquí, por ejemplo: http: //stackoverflow.com/questions/7857020/ggplot2-zooming-in-on-geom-smooth-automatically-using-coord-cartesian –

Respuesta

13

Uso coord_cartesian en lugar de scale_y_continuous

ggplot(mtcars, aes(x=hp, y= mpg, group=tran)) + 
geom_smooth(aes(colour=tran)) + 
coord_cartesian(ylim = c(12,60)) 
+0

Brilliant ta! Siempre es un camino, solo tengo que saber dónde mirar. – nzcoops

Cuestiones relacionadas