Esta noticia ha sido evaluado por expertos para garantizar la exactitud de nuestra esta crónica.
Solución:
¡Resulta que esto es posible! Requiere buscar el código fuente, pero la solución surge con bastante facilidad. Estamos interesados en ggpairs
función, por lo que el primer paso es simplemente
ggpairs
Veamos si podemos encontrar algún mapeo aes para rellenar o colorear. Por supuesto,
combo_aes <- addAndOverwriteAes(aes_string(x = xColName,
y = yColName, ...), section_aes)
Podemos esperar que haga lo que dice. Dos notas importantes:
-
el color y el relleno aes deben estar contenidos en los puntos suspensivos para el
ggpairs
llamada -
aes_string()
se usa
Probemos esto:
ggpairs(diamonds[, 1:2], colour='cut')
¡Excelente, ya casi llegamos! Solo necesitamos anular la paleta de colores. Tenga en cuenta que algo como usted propone
ggpairs(diamonds[, 1:2], colour='cut') + scale_fill_brewer(palette = "Set2")
no funcionará porque el objeto ggpairs no es un ggplot, por lo que el +
notación no es directamente aplicable de ninguna manera. Sin embargo, la solución alternativa simple se proporciona aquí. Cruza los dedos y...
ggplot <- function(...) ggplot2::ggplot(...) + scale_fill_brewer(palette="Set2")
ggpairs(diamonds[, 1:2], colour='cut')
actualizar:
GGally se actualizó nuevamente y el truco en esta respuesta además ya no funciona, pero finalmente hay una solución no pirateada: dado
scales <- scale_colour_brewer(type = 'qual') %+% scale_fill_brewer(type = 'qual')
puede hacer (de una manera con suerte preparada para el 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 pirateemos uno nuevo!
La estructura interna de un ggpairs
objeto 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 el gráfico, las cadenas respectivas en el objeto de gráfico deben modificarse para incluir el comando adicional. Para esto, usamos deparse(substitute(argument))
conseguir un string que contiene el código que el usuario pasó, y agréguelo a cada llamada de 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'))
Siento que la forma más sencilla de cambiar la paleta es modificar su propia función gráfica, ya que devuelven objetos ggplot2 que se pueden personalizar libremente.
Para cambiar la densidad en la diagonal, solo cambia la función correspondiente, ggally_densityDiag
.
modified_density = function(data, mapping, ...)
ggally_densityDiag(data, mapping, ...) + scale_fill_brewer(type = "qual", palette = "Set2")
Luego, proporcione la nueva función a ggparis
llamada de función, como se muestra a continuación,
ggpairs(iris, columns = 1:3, aes(color = Species),
diag = list(continuous = modified_density))
Hay upper
y lower
argumentos que también se pueden usar para otras partes de la trama.
Recuerda que puedes dar difusión a este escrito si lograste el éxito.