Eduardo Bustos
2012-Feb-14 14:46 UTC
[R-es] Agregar scatterplot a stat_contour con ggplot2
Estimados: Estoy entrampado con el siguiente problema. Poseo un dataframe (f), con datos x, y, z, los cuales no son coordenadas ni alturas, sino niveles de tres variables cualquiera. Lo que busco es presentar en un gráfico es: a) el scatterplot de las variables ''x'' e ''y'', y además b) las isolineas de ''z'' para los distintos niveles de ''x'' e ''y (obtenidas con stat_contour), con tal de poder visualizar tanto la dispersión de los datos x-y, como el efecto que estos poseen en una variable respuesta z. Todo bien con las isolineas, pero no logro agragar los puntos. He elegido ggplot2 por el acabado, pero me ha dado buenos dolores de cabeza al intentar combinar ambas salidas en un mismo grafico. Nota: en la ayuda de stat_geom de ggplot2, aparece el argumento "position", el cual al parecer tiene relación con mi problema, pero no he encontrado mayor información en la red. Más abajo el código. Agradecido de antemano, Eduardo. ############################################################################################################################### ############################################################################################################################### # Definición del Data Frame f <- c(x, y, z) # Modelo lineal definido entre las variables f.lm <- lm(z ~ x + y, data=f) # generación de la grilla de las combinaciones para los distintos niveles de ''x'' e ''y'' en el rango observado f.fit <- expand.grid(x=seq(min(f$x),max(f$x),0.5), y=seq(min(f$y),max(f$y),0.5)) # Prediccion de z para la grilla generada usando el modelo lineal obtenido anteriormente z <- predict(f.lm, newdata=f.fit) f.fit$z <- as.numeric(z) f.fit$z <- round(f.fit$z, 2) # Gráfico ggplot para las isolineas agregando etiquetas para los niveles definidos (6) p <- ggplot(f.fit, aes(x=x, y=y, z=z)) p <- p + stat_contour(bins=6, aes(z=z, colour=..level..)) direct.label(p, method="bottom.pieces") ## Hasta aqui, todo ok, pero... p + geom_point(aes(x=f$x, y=f$y)) Error in data.frame(x = c(-44.28, -43.84, -31.95, -31.85, -31, -30.65, : arguments imply differing number of rows: 84, 735 ############################################################################################################################### ############################################################################################################################### -- *Eduardo Bustos S.* Ingeniero Agrónomo, M.Sc. Centro de Cambio Global UC efbustos@uc.cl +56.2.3544926 [[alternative HTML version deleted]]