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