Cambie los colores en ggpairs ahora que params está en desuso

Vi estas publicaciones GGally :: ggpairs ttwig sin líneas de división cuando se traza el coeficiente de correlación use ggpairs para crear esta ttwig

Después de leer, pude implementar este hack https://github.com/tonytonov/ggally/blob/master/R/gg-plots.r y mi diagtwig se ve así

mi trama

Creo que este es un buen resultado, pero no puedo cambiar los colores.

Un MWE es esto

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) 

Ahora quiero correr

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

Pero los colores siguen siendo los mismos. ¿Hay alguna manera de cambiar los colores ahora que params ya no funciona?

No está utilizando la wrap correctamente; consulte la viñeta para obtener más información . También para la diagonal ahora tiene que usar la función barDiag (pero ggpairs da errores muy útiles para decir esto)

Entonces, para su ejemplo, podemos cambiar el colour de los puntos en los paneles inferiores y el fill de las barras a continuación

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

Sin embargo, como el color de la lisa está codificado (ver ggally_smooth ), para cambiar su color necesita definir su propia función para pasarla. Entonces desde aquí

 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 manera similar, aquí hay una manera de definir una nueva función de correlación superior (similar a la que tiene)

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

Puede modificar algunos parámetros de las funciones de GGally utilizando wrap() como se explica aquí . Pero no todos los parámetros se nombran para que wrap sea ​​útil. Por ejemplo, si intenta cambiar la paleta predeterminada con una escala de color manual dentro del wrap es posible que aparezca un error como Error in wrap("cor",…) all parameters must be named arguments . En ese caso, puede crear funciones personalizadas para generar cualquier tipo de objeto ggplot apropiado para las secciones superior, inferior o diagonal de la ttwig de la matriz.

Sin embargo, hay un atajo (más seguro) si desea cambiar algunos parámetros (no nombrados en las funciones GGally para que sean wrap ) sin crear una función personalizada para diseñar un objeto ggplot. Simplemente llama a una función GGally ya existente dentro de una llamada a función, agregando los parámetros ggplot adicionales. Por ejemplo, para proporcionar un color de escala manual para tres categorías (en la nueva columna 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"))})) 
    Intereting Posts