2011-05-11 22 views
43

Ho esaminato le risposte in questo forum ma non riesco a trovare una risposta a questo problema specifico. Ho i seguenti dati e voglio creare un grafico a barre in cui le barre sono ordinati dal più grande al più piccolo in termini di "valore", piuttosto che averli in ordine alfabetico:Ordinamento di barre in 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) 

Poi il grafico a barre base:

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

Ho provato molti dei diversi riordini e trasformazioni che ho visto su StackOverflow ma non riesco a trovarne uno che funzioni. Sono sicuro che questo è abbastanza semplice, ma gradirei qualsiasi aiuto!

Grazie,

Greg

risposta

68

Volete funzione reorder():

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

Che dà:

reordered barplot

Se si vuole che il contrario, un facile il modo è solo per usare order() sul Value all'interno della chiamata reorder():

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

Oppure utilizzare '-Value' all'interno della chiamata a' reorder' per invertire la direzione. –

+0

@Richie - ovviamente (schiaffo faccia!) - chiaramente non sto pensando direttamente questo arvo! –

+0

Grazie, @Gavin e @Richie! Perfezionare! Apprezzo l'aiuto. –

Problemi correlati