Crie uma matriz de charts de dispersão (pares () equivalentes) em ggplot2

É possível plotar uma matriz de charts de dispersão com ggplot2 , usando os ggplot ggplot2 , como mapear fatores adicionais para colorir, moldar etc. e adicionar mais ggplot ?

Estou pensando em algo semelhante aos pairs funções base .

Você pode querer experimentar plotmatrix:

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

para mim mpg (primeira coluna em mtcars) não deve ser um fator. Eu não verifiquei, mas não há razão para que seja um. No entanto eu recebo um gráfico de dispersão 🙂


Nota: Para referência futura, a function plotmatrix() foi substituída pela function ggpairs() do pacote GGally , como sugere @ naught101 em outra resposta abaixo desta questão.

Eu continuo querendo fazer isso, mas plotmatrix é uma porcaria. Hadley recomenda usar o pacote GGally . Tem uma function, ggpairs que é um lote de pares vastamente melhorado (permite usar variables ​​não contínuas em seus frameworks de dados). Plota diferentes charts em cada quadrado, dependendo dos tipos de variables:

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

insira a descrição da imagem aqui

Se alguém quiser obter um object ggplot (não ggmatrix como no caso de ggpairs() ), a solução é derreter os dados duas vezes, então ggplot com facetting. facet_wrap seria melhor que facet_grid ao limitar a área plotada, dado que o parâmetro facet_grid scales = 'free' é fornecido.

 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') } 

insira a descrição da imagem aqui