2013-01-31 11 views
5

Chciałbym wykreślić działki z punktami ggplot2. oś X jest ciągła, oś Y to lista zwierząt. Dwie zmienne są wykreślane i fasetowane zgodnie z zachowaniem żywieniowym.ggplot2: Odwracanie kolejnoś ci dyskretnej zmiennej znakowej dla każdego aspektu na wolnej skali?

Oś Y jest w skali wolnej, ponieważ każde zwierzę występuje tylko w jednej kategorii zachowania żywieniowego.

library(ggplot2) 

# First clean up the data set: 
msleep.noNA <- msleep[!is.na(msleep$vore),] 
msleep.noNA.red <- msleep.noNA[c(1,3,6,7)] 
msleep.noNA.red <- msleep.noNA.red[!is.na(msleep.noNA.red[4]),] 
msleep.noNA.red <- melt(msleep.noNA.red) 

pg <- ggplot(msleep.noNA.red, aes(value, name, colour = variable)) + 
     geom_point() + 
     facet_grid(vore ~ ., scale="free_y", space = "free_y") 
pg 

# Try to reverse order of the y axis: 
pg + scale_y_reverse() 

# Not possible because its a factor, but it's not classified as such: 
class(msleep.noNA.red$name) 

Czy ktoś ma jakieś wskazówki, w jaki sposób mogę sporządzić listę nazw zwierząt w kolejności alfabetycznej na każdej działce?

+0

można wkleić dane (najlepiej przy użyciu 'dput') tak, że mogliśmy pracować na nim, aby odtworzyć swój kod? – Arun

+1

Witaj Arun, dzięki za komentarz. zestaw danych msleep jest dostępny jako część ggplot2. Wszystkie polecenia powinny działać na platformie z zainstalowanym ggplot2. –

+1

Możesz konwertować elementy na współczynnik za pomocą 'as.factor', więc' msleep.noNA.red $ name <- as.factor (msleep.noNA.red $ name) 'skonwertuje je jako czynnik i możesz następnie pracować z nim tak, jak z każdym innym czynnikiem. To pomaga? –

Odpowiedz

8

można przekształcić wektor ciąg do czynnika i określić kolejność poziomów:

Poniższe polecenie utworzy czynnik. Poziomy są w kolejności malejącej kolejności alfabetycznej:

msleep.noNA.red <- within(msleep.noNA.red, 
         name <- ordered(name, levels = rev(sort(unique(name))))) 

Teraz można wykreślić dane:

pg <- ggplot(msleep.noNA.red, aes(value, name, colour = variable)) + 
    geom_point() + 
    facet_grid(vore ~ ., scale="free_y", space = "free_y") 

enter image description here

+0

Dziękujemy! Dokładnie to! –

+0

Nie potrzebuję 'zamówionego()' tutaj, zwykły stary 'czynnik()' działa dobrze. – Gregor

+2

Jeśli nie chcesz zmieniać podstawowej ramki danych, możesz zrobić 'scale_y_discrete (limits = rev (poziomy (msleep.noNA.red $ name)))' zamiast 'scale_y_reverse()', i powinno działać. –

Powiązane problemy