2011-05-11 21 views
43

He revisado las respuestas en este foro pero parece que no puedo encontrar una respuesta a este problema específico. Tengo los siguientes datos y desea crear un gráfico de barras donde las barras se ordenan de mayor a menor en términos de "Valor", en lugar de tenerlos en orden alfabético:Orden de barras en 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) 

A continuación, la Gráfica de barras:

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

He intentado muchas de las diferentes reorganizaciones y cambios que he visto en StackOverflow pero parece que no puedo encontrar una que funcione. Estoy seguro de que esto es bastante simple, pero agradecería cualquier ayuda.

Gracias,

Greg

Respuesta

68

Usted quieren función reorder():

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

Lo que da:

reordered barplot

Si los quieres a la inversa, un fácil camino es solo usar order() en Value dentro de la llamada reorder():

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

O utilice '-Value' dentro de la llamada a' reorder' para invertir la dirección. –

+0

@Richie - por supuesto (¡cara de bofetadas!) - ¡Claramente no está pensando en esto! –

+0

Gracias, @Gavin y @Richie! ¡Perfecto! Aprecio la ayuda. –

Cuestiones relacionadas