Заказ баров в ggplot - PullRequest
47 голосов
/ 11 мая 2011

Я просмотрел ответы на этом форуме, но, похоже, не могу найти ответ на эту конкретную проблему.У меня есть следующие данные, и я хочу создать гистограмму, в которой столбцы упорядочены от наибольшего к наименьшему в терминах «Значение», а не в алфавитном порядке:

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)

Затем базовая гистограмма:

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

Я перепробовал множество различных переупорядочений и преобразований, которые я видел в StackOverflow, но, похоже, не могу найти тот, который работает.Я уверен, что это довольно просто, но я был бы признателен за любую помощь!

Спасибо,

Грег

1 Ответ

70 голосов
/ 11 мая 2011

Вы хотите функцию reorder():

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

Что дает:

reordered barplot

Если вы хотите их наоборот, проще всего использовать order() на Value внутри reorder() вызова:

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