Controlar el orden de visualización de la leyenda ggplot2

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

Por lo que puedo ver, el orden aparece relacionado con las tags de la escala real en lugar del orden de la statement 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 tags 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)) 

enter image description here

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

enter image description here

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 tags con espacios:

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

enter image description here


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