Kolejność i kolor słupków w barplot ggplot2

Mam bardzo denerwujący problem ze stosem słupków utworzonym za pomocąggplot2. Zostało już zadanych kilka podobnych pytań, ale po przejściu przez przykładowy kod nie wiem, co robię źle.

Chciałbym zrobić wykres tak, aby słupki były ułożone w następującej kolejności na podstawie ichBiogeographic.affinity: (Top to Bottom = Bassian, Widespread, Torresian i Eyrean). Kolory pasków powinny być następujące: (Bassian = drakgrey, Widespread = lightgrey, Torresian = white, a Eyrean = black).

Oto jak wygląda zestaw danych:

  biogeo
       Site Biogeographic.affinity Rank Number.of.species Total.Species    Percent
    1     A                Bassian    1                 1           121  0.8264463
    2     A                 Eyrean    4                39           121 32.2314050
    3     A              Torresian    3                62           121 51.2396694
    4     A             Widespread    2                19           121 15.7024793
    5    DD                Bassian    1                 1           128  0.7812500
    6    DD                 Eyrean    4                46           128 35.9375000
    7    DD              Torresian    3                63           128 49.2187500
    8    DD             Widespread    2                18           128 14.0625000
    9   E_W                Bassian    1                 1           136  0.7352941
    10  E_W                 Eyrean    4                54           136 39.7058824
    11  E_W              Torresian    3                65           136 47.7941176
    12  E_W             Widespread    2                16           136 11.7647059
    13   KS                Bassian    1                 2           145  1.3793103
    14   KS                 Eyrean    4                63           145 43.4482759
    15   KS              Torresian    3                62           145 42.7586207
    16   KS             Widespread    2                18           145 12.4137931
    17 Z_Ka                Bassian    1                 1           110  0.9090909
    18 Z_Ka                 Eyrean    4                64           110 58.1818182
    19 Z_Ka              Torresian    3                31           110 28.1818182
    20 Z_Ka             Widespread    2                14           110 12.7272727

To jest kod, który do tej pory napisałem (w tym niektóre z moich nieudanych prób rozwiązania problemu).

 ggplot(data=biogeo, aes(x=Site, y=Percent, fill=Biogeographic.affinity)) + geom_bar(stat="identity", colour="black")+ 
  scale_fill_grey() + ylab("Percent") + xlab("Location") +       
  theme_bw()+ theme(panel.grid.minor = element_blank()) 

Daje to podstawowy wykres, ale kolory i kolejność są nadal błędne. Aby poprawić kolejność, spróbowałem, ale nic to nie zmieniło (FRUSTRATED) !:

newone <- transform(biogeo, Biogeographic.affinity  = factor(Biogeographic.affinity ), Rank = factor(Rank, levels = 1:4))

Jeśli chodzi o zmianę koloru, próbowałem i wydaje się działać, ale wygląda na to, że kolejność jest nadal błędna!

cols<- c("Bassian"="darkgrey","Widespread"="lightgrey", "Torresian"="white", "Eyrean"="black") #designates the colors of the bars 
ggplot(data=newone, aes(x=Site, y=Percent, fill=Biogeographic.affinity)) + geom_bar(stat="identity", colour="black")+ 
  scale_fill_manual(values = cols) + ylab("Percent") + xlab("Location") +       
  theme_bw()+ theme(panel.grid.minor = element_blank()) 

proszę pomóż.

questionAnswers(1)

yourAnswerToTheQuestion