r plot ggplot2 ggally

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



plot ggplot2 (2)

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

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

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

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?


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 trama 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"))}))