2013-08-23 18 views
7

Mam poniżej data.frame o nazwie df. Mój problem dotyczy kolejności na osi Y. Chcę, aby nazwy na osi Y były uporządkowane zgodnie ze zmienną depth.ggplot2, Kolejność osi Y

Gdybym to zrobić:

ggplot(df,aes(x=factor(name),y=depth)) + geom_bar(stat='identity') + coord_flip() + labs(y='depth',x='species') 

mam graph1 poniżej którego nie jest uporządkowane. Dlatego przestrzegać instrukcji znalezione here, zamówiłem poziomy moim czynnik name według głębokości:

df2=df[order(df$depth),] 
df2$name=factor(df2$name,levels=df2$name) 
ggplot(df2,aes(x=factor(name),y=depth)) + geom_bar(stat='identity') + coord_flip() + labs(y='depth',x='species') 

mam Graph2 poniżej. Ale następnym krokiem było dla mnie barwienie prętów w różny sposób w zależności od zmiennej Mut.

ggplot(df2,aes(x=factor(name),y=depth)) + geom_bar(stat='identity',data=subset(df2,df2$Mut==2),fill='red') + geom_bar(stat='identity',data=subset(df2,df2$Mut==1),fill='blue') + coord_flip() + labs(y='depth',x='species') 

I dostałem Graph3, który już nie jest zamówiony !!

Jak mogę produkować graph3 poszanowaniem kolejność wyświetlanych w graph2

    name depth Mut   x 
25 A_rubrocinctus_GA070  8 2 -0.033318659 
9  A_omanensis_GA051 10 2 -0.020387101 
4 A_latifasciatus_GA083 12 1 -0.005645811 
27  A_frenatus_GA068 12 1 -0.024190876 
13  A_percula_GA017 15 1 0.034591721 
14  A_percula_GA039 15 2 0.034591721 
15  A_percula_GA053 15 2 0.034591721 
16  A_ocellaris_GA009 15 1 0.052042539 
17  A_ocellaris_GA021 15 1 0.052042539 
24  A_ephippium_GA057 15 2 -0.016859412 
20 P_biaculeatus_GA008 16 1 -0.014466403 
21 P_biaculeatus_GA025 16 1 -0.014466403 
22 P_biaculeatus_GA065 16 1 -0.014466403 
23  A_melanopus_GA034 18 2 -0.026915545 
26  A_melanopus_GA012 18 2 -0.026915545 
12 A_sandaracinos_GA018 20 1 0.055839755 
6  A_nigripes_GA055 25 1 0.023420045 
8   A_sebae_GA029 25 1 0.021767793 
11 A_akallopisos_GA067 25 1 0.043272525 
28 A_akallopisos_GA072 25 1 0.043272525 
34  A_akindynos_GA032 25 1 -0.020707141 
1  A_polymnus_GA004 30 1 0.030902254 
3  A_allardi_GA033 30 1 -0.020277664 
5  A_bicinctus_GA036 30 1 -0.025354572 
7  A_polymnus_GA019 30 1 0.030902254 
32 A_chrysopterus_GA040 30 1 -0.022402365 
33 A_chrysopterus_GA031 30 1 -0.022402365 
35 A_perideraion_GA020 38 1 0.052830132 
36 A_perideraion_GA015 38 1 0.052830132 
2  A_tricinctus_GA058 40 1 -0.016230301 
18 A_chrysogaster_GA080 40 1 0.012608835 
19 A_chrysogaster_GA077 40 1 0.012608835 
10 A_latezonatus_GA023 45 1 -0.010718845 
31 A_mccullochi_GA056 45 1 -0.031664307 
29  A_clarkii_GA044 60 1 -0.014474658 
30  A_clarkii_GA010 60 1 -0.014474658 

Graph1 enter image description here Graph2 enter image description here Graph3 enter image description here Dziękujemy!

Odpowiedz

17

Ponieważ w danych masz zmienną Mut, która określa, do którego poziomu należy każda obserwacja, nie musisz dwukrotnie używać geom_bar() z podzestawem. Po prostu dodaj fill=factor(Mut) do wnętrza aes() i użyj df2 z zamówionymi danymi. Bary będą w poprawnej kolejności, a kolor zostanie wykonany automatycznie.

ggplot(df2,aes(x=factor(name),y=depth,fill=factor(Mut))) + 
    geom_bar(stat='identity') + 
    coord_flip() + labs(y='depth',x='species') 

Ten sam wynik można uzyskać z pierwotnej dataframe df i działanie reorder() wewnątrz aes() dla wartości X.

ggplot(df,aes(x=reorder(name,depth),y=depth,fill=factor(Mut))) + 
    geom_bar(stat='identity') + 
    coord_flip() + labs(y='depth',x='species') 

enter image description here

+0

Great! Dziękuję Didzis Elferts! – Sulawesi