Controlando a ordem de exibição da legenda ggplot2

Alguém sabe como posso obter o controle da ordenação de legendas no ggplot2?

Pelo que vejo, a ordem aparece relacionada aos labels de escala reais, e não à ordem de declaração de escala. Alterar os títulos da escala altera a ordem. Eu fiz um pequeno exemplo usando o dataset de diamante para destacar isso. Eu estou tentando usar ggplot2 para uma série de charts e quero fazer uma variável aparecer à direita em todos eles. No momento, porém, isso só acontece em alguns deles, e eu não entendo como impor a ordem desejada, mantendo os labels de escala apropriados.

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 

No 0.9.1, a regra para determinar a ordem das legendas é secreta e imprevisível . Agora, na versão 0.9.2 dev no github, você pode usar o parâmetro para definir a ordem da legenda.

Aqui está o exemplo:

 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)) 

insira a descrição da imagem aqui

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

insira a descrição da imagem aqui

Parece-me que a ordem da legenda é determinada pelo número de caracteres nos nomes da escala. (Sim, eu concordo, isso parece bizarro.)

Então, uma solução alternativa é preencher seus labels com espaços:

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

insira a descrição da imagem aqui


Espero sinceramente que alguém publique uma solução adequada em breve!