los leyendas histograma graphs grafico ggplot escala ejes como cambiar r ggplot2

leyendas - Controlar el orden de visualización de la leyenda ggplot2



leyendas en r (2)

¿Alguien sabe cómo puedo controlar el orden de las leyendas en ggplot2?

Por lo que puedo ver, el orden aparece relacionado con las etiquetas de la escala real en lugar del orden de la declaración de la escala. Cambiar los títulos de la escala altera el orden. He hecho un pequeño ejemplo usando el dataset de diamante para resaltar esto. Intento usar ggplot2 para una serie de gráficos y quiero hacer que una variable aparezca a la derecha en todos ellos. En este momento, esto solo sucede en algunos de ellos, y no sé cómo hacer para que mi ordenamiento deseado conserve las etiquetas de escala apropiadas.

library(ggplot2) diamond.data <- diamonds[sample(nrow(diamonds), 1000), ] plot <- ggplot(diamond.data, aes(carat, price, colour = clarity, shape = cut)) + geom_point() + opts(legend.position = "top", legend.box = "horizontal") plot # the legend will appear shape then colour plot + labs(colour = "A", shape = "B") # legend will be colour then shape plot + labs(colour = "Clarity", shape = "Cut") # legend will be shape then colour


En 0.9.1, la regla para determinar el orden de las leyendas es secreta e impredecible . Ahora, en 0.9.2, versión dev en github, puede usar el parámetro para configurar el orden de la leyenda.

Aquí está el ejemplo:

plot <- ggplot(diamond.data, aes(carat, price, colour = clarity, shape = cut)) + geom_point() + opts(legend.position = "top") plot + guides(colour = guide_legend(order = 1), shape = guide_legend(order = 2))

plot + guides(colour = guide_legend(order = 2), shape = guide_legend(order = 1))


Me parece que el orden de la leyenda está determinado por el número de caracteres en los nombres de la escala. (Sí, estoy de acuerdo, eso parece extraño)

Por lo tanto, una solución es rellenar sus etiquetas con espacios:

plot + labs(colour = "Clarity", shape = " Cut")

¡Sinceramente espero que alguien publique una solución adecuada pronto!