shinythemes - Ordenar múltiples leyendas/guías(¿qué es la lógica automática y cómo cambiarla?)
tags$div shiny (1)
Como mencioné en el comentario anterior, no hay manera de controlar y predecir la posición del cuadro de leyenda. No estaba al tanto de este problema. Gracias por aclarar esto.
Tal vez algunas personas necesitan controlar el cuadro de leyenda, aquí pongo una solución rápida:
# run this code before calling ggplot2 function
guides_merge <- function(gdefs) {
gdefs <- lapply(gdefs, function(g) { g$hash <- paste(g$order, g$hash, sep = "z"); g})
tapply(gdefs, sapply(gdefs, function(g)g$hash), function(gs)Reduce(guide_merge, gs))
}
environment(guides_merge) <- environment(ggplot)
assignInNamespace("guides_merge", guides_merge, pos = "package:ggplot2")
y luego puede usar el argumento de order
para guide_legend
(y también guide_colorbar
),
# specify the order of the legend.
qplot(data = mpg,x = displ, y = cty, size = hwy, colour = class, alpha = cyl)+
guides(size = guide_legend(order = 1), colour = guide_legend(order = 2), alpha = guide_legend(order = 3))
qplot(data = mpg,x = displ, y = cty, size = hwy, colour = class, alpha = cyl)+
guides(size = guide_legend(order = 3), colour = guide_legend(order = 1), alpha = guide_legend(order = 2))
order
argumento de order
debe ser un entero positivo. Las leyendas están dispuestas a lo largo del pedido. Tenga en cuenta que esta es una solución rápida, por lo que la interfaz puede cambiarse en la próxima versión oficial de ggplot2.
Me topé con este extraño comportamiento con el ordenamiento de leyendas de ggplot2s y simplemente no puedo entender cuál es la lógica detrás de la colocación automática de las leyendas:
Mi objetivo: en una trama con varias escalas, quiero organizarlas en un orden diferente (temático) que el automático. Pero no pude encontrar un comando en opts () o guías () para hacer esto por mí. Y para ser claros: no quiero cambiar los elementos dentro de las leyendas, eso funciona bien, pero la disposición de varias leyendas completas.
Así que primero asumí que estaban ordenados por tipo, es decir, escala, color, etc. Pero ese no es el caso, su posición cambia (ver más abajo).
¿Orden alfabetico? No.
library(ggplot2) ## v0.9
## Scale_colour on top
qplot(data = mpg,x = displ, y = cty, size = hwy, colour = class) +
scale_size(name = "A") + scale_colour_discrete(name = "B")
## Reverse names --> scale_colour on bottom
qplot(data = mpg,x = displ, y = cty, size = hwy, colour = class) +
scale_size(name = "B") + scale_colour_discrete(name = "A")
## Change name B to C --> scale_colour on bottom
qplot(data = mpg,x = displ, y = cty, size = hwy, colour = class) +
scale_size(name = "C") + scale_colour_discrete(name = "A")
## Change name B to D --> scale_colour on top
qplot(data = mpg,x = displ, y = cty, size = hwy, colour = class) +
scale_size(name = "D") + scale_colour_discrete(name = "A")
Posiciones adicionales de scale_colour (por nombre de scale_size intercambiado)
- "E": abajo
- "F" - "L": arriba
- "M" - "N": abajo
y sigue apareciendo en la parte superior y en la parte inferior.
Orden factorial? No.
## From top to bottom: C - B - A
fname <- factor(c("A","B","C"), levels = c("A","B","C"))
qplot(data = mpg,x = displ, y = cty, size = hwy, colour = class, alpha = cyl) +
scale_size(name = fname[1]) + scale_colour_discrete(name = fname[2]) + scale_alpha(name=fname[3])
## From top to bottom: B - C - A
fname <- factor(c("A","B","C"), levels = c("C","B","A"))
qplot(data = mpg,x = displ, y = cty, size = hwy, colour = class, alpha = cyl) +
scale_size(name = fname[1]) + scale_colour_discrete(name = fname[2]) + scale_alpha(name=fname[3])
## From top to bottom: B - C - A
fname <- factor(c("A","B","C"), levels = c("B","C","A"))
qplot(data = mpg,x = displ, y = cty, size = hwy, colour = class, alpha = cyl)+
scale_size(name = fname[1]) + scale_colour_discrete(name = fname[2]) + scale_alpha(name=fname[3])
Longitud del título? No. Me detendré por ahora con el código de ejemplo, pero ese también produjo órdenes fluctuantes independientes de la longitud del carácter.
¿Algunas ideas?