ggpairs color
¿hay una manera de cambiar la paleta de colores para GGally:: ggpairs usando ggplot? (2)
actualizar:
GGAlly se actualizó nuevamente y el hackeo en esta respuesta ya no funciona, pero finalmente hay una solución que no es hack: dada
scales <- scale_colour_brewer(type = ''qual'') %+% scale_fill_brewer(type = ''qual'')
Usted puede hacer (con suerte, a prueba de futuro)
for (row in seq_len(ps$nrow))
for (col in seq_len(ps$ncol))
ps[row, col] <- ps[row, col] + scales
vieja forma
El truco en la otra respuesta ya no funciona, ¡así que vamos a piratear uno nuevo!
La estructura interna de un objeto ggpairs
es el conjunto de datos y una lista de cadenas:
> dta <- data.frame(a=1:6, b=7:12, c=c(''f'', ''g''))
> ps <- ggpairs(dta, 1:2, colour = ''c'')
> str(ps)
List of 10
$ data :''data.frame'': 2 obs. of 3 variables:
..$ a: int [1:2] 1 2
..$ b: int [1:2] 3 4
..$ c: int [1:2] 5 6
$ columns : int [1:3] 1 2 3
$ plots :List of 9
..$ : chr "ggally_densityDiag(ggally_data, ggplot2::aes(x = a, colour = c))"
..$ : chr "ggally_cor(ggally_data, ggplot2::aes(x = b, y = a, colour = c))"
[...]
$ gg : NULL
- attr(*, "class")= chr [1:2] "gg" "ggpairs"
> ps
Para modificar la trama, las cadenas respectivas en el objeto de la parcela deben modificarse para incluir el comando adicional. Para esto, usamos deparse(substitute(argument))
para obtener una cadena que contiene el código que el usuario pasó, y lo agregamos a cada llamada de la trama:
add_to_plots <- function(pairs, modification) {
str <- deparse(substitute(modification))
pairs$plots <- lapply(pairs$plots, function(s) paste(s, ''+'', str))
pairs
}
> add_to_plots(ps, scale_colour_brewer(type = ''qual''))
Me gustaría cambiar la paleta de colores para la función ggpairs
. Cuando intento agregar comandos ggplot al ggplot devuelto usando getPlot
, los colores no cambian.
my_pair_plot = ggpairs(dataset, color="var1")
getPlot(my_pair_plot,2,1) + scale_fill_brewer(palette = "Set2")
Intentar poner comandos ggplot directamente en la función ggpairs
da como resultado un error.
ggpairs(dataset, color="var1") + scale_fill_brewer(palette = "Set2")
Resulta que, esto es posible! Requiere buscar el código fuente, pero la solución surge con bastante facilidad. Estamos interesados en la función ggpairs
, por lo que el primer paso es simplemente
ggpairs
Vamos a ver si podemos encontrar algún mapeo aes para rellenar o colorear. En efecto,
combo_aes <- addAndOverwriteAes(aes_string(x = xColName,
y = yColName, ...), section_aes)
Esperemos que haga lo que dice. Dos notas importantes:
el color y el relleno deben estar contenidos en los puntos suspensivos para la llamada
ggpairs
se utiliza
aes_string()
Probemos esto:
ggpairs(diamonds[, 1:2], colour=''cut'')
¡Excelente, ya casi llegamos! Solo tenemos que anular la paleta de colores. Ten en cuenta que algo como lo propones
ggpairs(diamonds[, 1:2], colour=''cut'') + scale_fill_brewer(palette = "Set2")
no funcionará porque el objeto ggpairs no es un ggplot, por lo que la notación +
no es directamente aplicable de ninguna manera. Sin embargo, la solución simple se proporciona here . Cruza los dedos, y ...
ggplot <- function(...) ggplot2::ggplot(...) + scale_fill_brewer(palette="Set2")
ggpairs(diamonds[, 1:2], colour=''cut'')