Crea una matriz de diagtwigs de dispersión (pares () equivalentes) en ggplot2

¿Es posible trazar una matriz de gráficos de dispersión con ggplot2 , usando las características agradables de ggplot como mapear factores adicionales para el color, la forma, etc. y agregar más suave?

Estoy pensando en algo similar a los pairs funciones base .

Es posible que desee probar plotmatrix:

  library(ggplot2) data(mtcars) plotmatrix(mtcars[,1:3]) 

para mí mpg (primera columna en mtcars) no debería ser un factor. No lo he comprobado, pero no hay ninguna razón por la que debería ser uno. Sin embargo, recibo un diagtwig de dispersión 🙂


Nota: Para futuras referencias, la función plotmatrix() ha sido reemplazada por la función ggpairs() del paquete GGally , ya que @ naught101 sugiere en otra respuesta a continuación esta pregunta.

Sigo queriendo hacer esto, pero plotmatrix es una mierda. Hadley recomienda usar el paquete GGally en su lugar. Tiene una función, ggpairs que es una plot de pares muy mejorada (le permite usar variables no continuas en sus marcos de datos). Traza diferentes plots en cada cuadrado, dependiendo de los tipos de variables:

 library(GGally) ggpairs(iris, aes(colour = Species, alpha = 0.4)) 

enter image description here

Si uno quiere obtener un objeto ggplot (no ggmatrix como en el caso de ggpairs() ), la solución es fundir los datos dos veces, luego ggplot con facetas. facet_wrap sería mejor que facet_grid para limitar el área graficada, dado que las scales = 'free' se proporciona el parámetro scales = 'free' .

 require(ggplot2) require(dplyr) require(tidyr) gatherpairs <- function(data, ..., xkey = '.xkey', xvalue = '.xvalue', ykey = '.ykey', yvalue = '.yvalue', na.rm = FALSE, convert = FALSE, factor_key = FALSE) { vars <- quos(...) xkey <- enquo(xkey) xvalue <- enquo(xvalue) ykey <- enquo(ykey) yvalue <- enquo(yvalue) data %>% { cbind(gather(., key = !!xkey, value = !!xvalue, !!!vars, na.rm = na.rm, convert = convert, factor_key = factor_key), select(., !!!vars)) } %>% gather(., key = !!ykey, value = !!yvalue, !!!vars, na.rm = na.rm, convert = convert, factor_key = factor_key) } iris %>% gatherpairs(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width) %>% { ggplot(., aes(x = .xvalue, y = .yvalue, color = Species)) + geom_point() + geom_smooth(method = 'lm') + facet_wrap(.xkey ~ .ykey, ncol = length(unique(.$.ykey)), scales = 'free', labeller = label_both) + scale_color_brewer(type = 'qual') } 

enter image description here