2011-05-11 9 views
43

Przejrzałem odpowiedzi na tym forum, ale nie mogę znaleźć odpowiedzi na ten konkretny problem. Mam następujące dane i chce utworzyć wykres słupkowy gdzie bary są uporządkowaną od największej do najmniejszej w kategoriach „wartość”, zamiast je w kolejności alfabetycznej:Zamawianie krat w ggplot

breadth_data <- read.table(textConnection("Stakeholder Value 
'Grantseekers' 0.90 
'Donors' 0.89 
'Community' 0.55 
'Hurricane Relief Fund' 0.24 
'Media' 0.19 
'Employment Seekers' 0.12 
'Affiliates' 0.10 
'Youth' 0.09 
'Women' 0.02 
'Former Board Members' 0.01"), header=TRUE) 

Następnie podstawowy wykres słupkowy:

c <- ggplot(breadth_data, aes(x=Stakeholder, y=Value)) 
c + geom_bar(stat="identity") + coord_flip() + scale_y_continuous('') + scale_x_discrete('') 

Próbowałem wielu różnych zamian i przekształceń, które widziałem na StackOverflow, ale nie mogę znaleźć takiego, który działa. Jestem pewien, że jest to dość proste, ale byłbym wdzięczny za każdą pomoc!

Dzięki,

Greg

Odpowiedz

68

Chcesz funkcję reorder():

breadth_data <- transform(breadth_data, 
          Stakeholder = reorder(Stakeholder, Value)) 

co daje:

reordered barplot

Jeśli chcesz im odwrót, łatwym sposób jest po prostu użyć order() na Value wewnątrz zaproszenia reorder():

breadth_data <- transform(breadth_data, 
          Stakeholder = reorder(Stakeholder, 
               order(Value, decreasing = TRUE))) 
+7

też użyć '-Value' wewnątrz zaproszenia do' reorder' aby odwrócić kierunek. –

+0

@Richie - oczywiście (klepie twarz!) - najwyraźniej nie myśląc prosto to arvo! –

+0

Dzięki, @Gavin i @Richie! Idealny! Doceniam pomoc. –