web-dev-qa-db-fra.com

Commande de barres dans ggplot

J'ai regardé les réponses dans ce forum mais ne semble pas trouver de réponse à ce problème spécifique. J'ai les données suivantes et je souhaite créer un graphique à barres où les barres sont classées du plus grand au plus petit en termes de "valeur", plutôt que de les avoir dans l'ordre alphabétique:

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)

Ensuite, le graphique à barres de base:

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

J'ai essayé bon nombre des réorganisations et transformations différentes que j'ai vues sur StackOverflow mais je n'arrive pas à en trouver une qui fonctionne. Je suis sûr que c'est assez simple, mais j'apprécierais toute aide!

Merci,

Greg

47
Gregory Saxton

Vous voulez la fonction reorder():

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

Qui donne:

reordered barplot

Si vous les souhaitez dans l'autre sens, un moyen simple consiste simplement à utiliser order() sur Value à l'intérieur de l'appel reorder():

breadth_data <- transform(breadth_data,
                          Stakeholder = reorder(Stakeholder, 
                                                order(Value, decreasing = TRUE)))
70
Gavin Simpson