2012-07-09 12 views
53

Czy ktoś wie, w jaki sposób mogę uzyskać kontrolę nad porządkowaniem legend w ggplot2?Kontrolowanie kolejności wyświetlania legendy ggplot2

Z tego, co widzę, pojawia się kolejność związana z rzeczywistymi etykietami skali, a nie z kolejnością deklaracji skali. Zmiana tytułów skali zmienia kolejność. Zrobiłem mały przykład przy użyciu zestawu danych diamentów, aby to podkreślić. Próbuję użyć ggplot2 dla serii fabuł i chcę, aby jedna zmienna pojawiła się po prawej we wszystkich. Obecnie dzieje się tak tylko w niektórych z nich i nie mam pojęcia, jak wymóc moje pożądane zamówienie, zachowując przy tym odpowiednie oznaczenia skali.

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

pokrewne (choć kwestia ta ma lepsze rozwiązanie): http://stackoverflow.com/questions/10035551/order-of-multiple-legends-guides-what-is-the-automatic-logic-how-to-change –

Odpowiedz

87

W wersji 0.9.1, reguła ustalania kolejności legend jest tajny i nieprzewidywalne. Teraz, w wersji 0.9.2, dev w github, możesz użyć parametru do ustawienia kolejności legendy.

Oto przykład:

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

Wydaje mi się, że kolejność legendzie jest określana przez liczbę znaków w nazwach skalę. (Tak, zgadzam się, że wydaje się dziwaczne.)

Tak, obejście jest pad etykiet ze spacjami:

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

enter image description here


Mam szczerą nadzieję, że ktoś księguje właściwe rozwiązanie wkrótce!

+0

Dostaję jasność, a następnie cięte (wypełnione spacjami) w mojej legendzie, jeśli zrobię to Ty to zrobiłeś. packageDescription ("ggplot2") $ Version = 0.9.1 – Spacedman

+0

Powinienem był jasno powiedzieć, że naprawdę chcę koloru, a następnie kształtu (tj. Clarity, a następnie Cut), a nie Cut a Clarity, podobnego do twojego przykładu. Chcę jednak móc nazwać skale czegokolwiek i nadal mieć to zamówienie. – Alastair

+4

@Alastair Teraz jest jasne, że moje obejście działa tylko w 'ggplot2' wersji 0.9.0 - to obejście nie działa już w wersji 0.9.1. Tak więc, jeśli nadal używasz wersji 0.9.0, możesz wstawić łańcuchy za pomocą spacji, aby uzyskać pożądaną kolejność. Jak już powiedziałem, jest to tylko obejście (i jeden z ograniczonym czasem przydatności do użycia). – Andrie

Powiązane problemy