2016-08-08 12 views
8

Przykładowa ramka danych:Czy można zmienić kolejność tylko aspektów facet_wrap, bez zmiany kolejności podstawowych poziomów czynników?

df <- data.frame(x=rep(1:10,4),y=rnorm(40),Case=rep(c("B","L","BC","R"),each=10)) 

mogę wykreślić każdy szeregów czasowych w swoim aspekcie z:

ggplot(df,aes(x=x,y=y,color=Case)) + geom_line()+facet_wrap(~Case,nr=2,nc=2) 

enter image description here Teraz załóżmy, że chcę zmienić kolejność FACET do (począwszy od TOP- w lewo i idź do dołu po prawej wzdłuż wierszy) "L", "B", "R", "BC". Zwykła sugestia tutaj na temat SO to zrobienie this. Jeśli jednak zmieni się kolejność poziomów współczynnika Case, również kolory krzywych zostaną zmienione. Czy można zmienić kolejność aspektów, nie zmieniając również kolejności kolorów krzywych? Wiem, że to brzmi jak dziwne pytanie. Problemem jest to, że mój raport jest w toku, aw starszej wersji raportu, który już pokazał współpracowników & zarządzanie, było wiele działek mniej więcej tak (bez facet_wrap):

ggplot(df,aes(x=x,y=y,color=Case)) + geom_line() 

Innymi słowy, do tej pory ludzie kojarzą "B" z czerwonym kolorem. Jeśli będę ponownie zamawiać, "L" będzie czerwone, "B" zielone, i tak dalej. Już słyszę skargi ... jakikolwiek sposób z tego?

Odpowiedz

4

Po prostu skopiuj dane do nowej kolumny z żądaną kolejnością. Użyj nowej kolumny dla faceting, starej kolumny dla koloru.

df$facet = factor(df$Case, levels = c("L", "B", "R", "BC")) 

ggplot(df, aes(x = x, y = y, color = Case)) + 
    geom_line() + 
    facet_wrap(~facet, nr = 2) 
+0

Genialny! W moim prawdziwym przypadku zmapowałem Case nie tylko do "color" estetycznego, ale także do "rodzaju linii". Dlatego też inne rozwiązania wymusiłyby ręczne ustawienie skali dla 'rodzaju linii '. Twoje rozwiązanie jest prostsze. Dzięki! – DeltaIV