2012-07-09 13 views
53

¿Alguien sabe cómo puedo obtener el control del orden de las leyendas en ggplot2?Control de la orden de visualización de la leyenda ggplot2

Por lo que puedo ver, el orden aparece relacionado con las etiquetas de escala reales en lugar del orden de la declaración de 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 
+2

Relacionados (aunque esta cuestión tiene una mejor solución): http://stackoverflow.com/questions/10035551/ordering-of-multiple-legends-guides-what-is-the-automatic-logic-how-to-change –

Respuesta

87

En 0.9.1, la regla para determinar el orden de las leyendas es secreto y impredecible. Ahora, en 0.9.2, versión dev en github, puede usar el parámetro para establecer 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

12

Me parece que el orden de la leyenda se determina por el número de caracteres en los nombres de las escalas. (Sí, estoy de acuerdo, que parece extraño.)

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

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

enter image description here


sinceramente espero que alguien publica una solución adecuada ¡pronto!

+0

Obtengo claridad y luego corte (rellenado con espacios) en mi leyenda si hago lo que t lo hiciste packageDescription ("ggplot2") $ Version = 0.9.1 – Spacedman

+0

Debería haber dejado en claro que realmente quiero el color, luego la forma (es decir, Claridad luego Cortar), no Cortar y Claridad similar a su ejemplo. Sin embargo, quiero poder nombrar las escalas y aún tener ese orden. – Alastair

+4

@Alastair Ahora está claro que mi solución solo funcionará en 'ggplot2' versión 0.9.0; esta solución ya no funciona en la versión 0.9.1. Por lo tanto, si todavía está usando 0.9.0, puede rellenar las cadenas con espacios para obtener el orden deseado. Como dije, es solo una solución (y una con una vida útil limitada). – Andrie

Cuestiones relacionadas