Alterar colors em ggpairs agora que params está obsoleto

Eu vi esses posts GGally :: ggpairs plotar sem linhas de grade ao plotar o coeficiente de correlação use ggpairs para criar este plot

Depois de ler, eu pude implementar esse hack https://github.com/tonytonov/ggally/blob/master/R/gg-plots.r e meu enredo se parece com isso

meu enredo

Eu acho que este é um bom resultado, mas não posso mudar as colors.

Um MWE é isto

library(ggally) # load the hack source("ggally_mod.R") # I saved https://github.com/tonytonov/ggally/blob/master/R/gg-plots.r as "ggally_mod.R" assignInNamespace("ggally_cor", ggally_cor, "GGally") ggpairs(swiss) 

Agora eu quero correr

 ggpairs(swiss, lower=list(continuous="smooth", wrap=c(colour="blue")), diag=list(continuous="bar", wrap=c(colour="blue"))) 

Mas as colors continuam as mesmas. Existe uma maneira de mudar as colors agora que os parâmetros não estão mais funcionando?

Você não está usando o wrap corretamente – veja a vinheta para detalhes . Também para a diagonal você agora tem que usar a barDiag (mas ggpairs dá erros muito úteis para dizer isso)

Então, para o seu exemplo, podemos mudar a colour dos pontos nos painéis inferiores e o fill das barras abaixo

 library(GGally) library(ggplot2) ggpairs(swiss[1:3], lower=list(continuous=wrap("smooth", colour="blue")), diag=list(continuous=wrap("barDiag", fill="blue"))) 

Entretanto, como a cor da suavidade é codificada (veja ggally_smooth ), para alterar sua cor você precisa definir sua própria function para passar. Então daqui

 my_fn <- function(data, mapping, pts=list(), smt=list(), ...){ ggplot(data = data, mapping = mapping, ...) + do.call(geom_point, pts) + do.call(geom_smooth, smt) } # Plot ggpairs(swiss[1:4], lower = list(continuous = wrap(my_fn, pts=list(size=2, colour="red"), smt=list(method="lm", se=F, size=5, colour="blue"))), diag=list(continuous=wrap("barDiag", fill="blue"))) 

De maneira semelhante, aqui está uma maneira de definir uma nova function de correlação superior (semelhante ao que você tem)

 cor_fun <- function(data, mapping, method="pearson", ndp=2, sz=5, stars=TRUE, ...){ data <- na.omit(data[,c(as.character(mapping$x), as.character(mapping$y))]) x <- data[,as.character(mapping$x)] y <- data[,as.character(mapping$y)] corr <- cor.test(x, y, method=method) est <- corr$estimate lb.size <- sz* abs(est) if(stars){ stars <- c("***", "**", "*", "")[findInterval(corr$p.value, c(0, 0.001, 0.01, 0.05, 1))] lbl <- paste0(round(est, ndp), stars) }else{ lbl <- round(est, ndp) } ggplot(data=data, mapping=mapping) + annotate("text", x=mean(x), y=mean(y), label=lbl, size=lb.size,...)+ theme(panel.grid = element_blank()) } ggpairs(swiss, lower=list(continuous=wrap("smooth", colour="blue")), diag=list(continuous=wrap("barDiag", fill="blue")), upper=list(continuous=cor_fun)) 

Você pode modificar alguns parâmetros de funções GGally usando wrap() como explicado aqui . Mas nem todos os parâmetros são nomeados para wrap para serem úteis. Por exemplo, se você tentar alterar a paleta padrão com uma escala de colors manual no wrap poderá receber um erro como Error in wrap("cor",…) all parameters must be named arguments . Nesse caso, você pode criar funções personalizadas para gerar qualquer tipo de object ggplot apropriado para as seções superior, inferior ou diagonal do gráfico de matriz.

No entanto, existe um atalho (mais seguro) se você quiser alterar alguns parâmetros (não nomeados nas funções GGally para serem agrupados) sem criar uma function personalizada para projetar um object ggplot. Você acabou de chamar uma function GGally já existente dentro de uma chamada de function, adicionando os parâmetros ggplot extras. Por exemplo, para fornecer uma cor de escala manual para três categorias (na nova coluna swiss $ groups):

 swiss$groups <- gl(n = 3, k = 1, length = nrow(swiss), labels = c("A", "B", "C")) ggpairs(swiss, mapping = aes(colour = groups), columns = 1:6, upper = list(continuous = function(data, mapping, ...) { ggally_cor(data = data, mapping = mapping, size = 2) + scale_colour_manual(values = c("black", "dark green", "red"))}), lower = list(continuous = function(data, mapping, ...) { ggally_smooth(data = data, mapping = mapping, alpha = .2) + scale_colour_manual(values = c("black", "dark green", "red"))}), diag = list(continuous = function(data, mapping, ...) { ggally_barDiag(data = data, mapping = mapping, alpha = .5) + scale_fill_manual(values = c("black", "dark green", "red"))}))