2010-10-22 3 views
3

У меня есть data.frame с записями, как:Как заказать перерывы с ggplot/geom_bar

 
    variable importance order 
1  foo 0.06977263  1 
2  bar 0.05532474  2 
3  baz 0.03589902  3 
4  alpha 0.03552195  4 
5  beta 0.03489081  5 
     ... 

При построении выше, с перерывами = переменной, я хотел бы для того, чтобы сохраниться, а чем в алфавитном порядке.

Я рендеринг с:

 
ggplot (data, aes(x=variable, weight=importance, fill=variable)) + 
    geom_bar() + 
    coord_flip() + opts(legend.position='none') 

Однако, порядок имен переменных в алфавитном порядке, а не порядок в кадре данных. Я видел сообщение об использовании «ордера» в aes, но, похоже, не имеет никакого эффекта.

Я ищу, чтобы иметь порядок перерывов в строке с колонкой «порядок».

Существует, похоже, аналогичный вопрос How to change the order of discrete x scale in ggplot, но, откровенно говоря, не понял ответа в этом контексте.

+1

FYI: Это проще для людей, чтобы ответить, если вы используете 'dput' и добавить небольшую выборку данных в конце вашего поста (или же использовать глобально доступный набор данных из пакета 'datasets' в базе R). – Shane

+0

Является ли 'variable' символом или фактором? –

+0

переменная является фактором. Я собираюсь посмотреть ответы ниже ... –

ответ

6

Try:

data$variable <- factor(data$variable, levels=levels(data$variable)[order(-data$order)]) 

От: ggplot2 sorting a plot Part II

+0

Похоже, это самое простое решение. спасибо –

1

Выстрел в темноте, но, возможно, что-то вроде этого:

data$variable <- factor(data$variable, levels=data$variable) 
2

Другим решением является построить порядок, а затем изменить этикетки после факта:

df <- data.frame(variable=letters[c(3,3,2,5,1)], importance=rnorm(5), order=1:5) 
p <- qplot(x=order, weight=importance, fill=variable, data=df, geom="bar") + 
    scale_x_continuous("", breaks=1:5, labels=df$variable) + 
    coord_flip() + opts(legend.position='none') 
+0

Спасибо. Это решает. Желание было встроенным подходом с атрибутом заказа, но я полагаю, что это не будет широко используемой функцией. –

4

Даже короче и легче понять:

data$Variable <- reorder(data$Variable, data$order) 
Смежные вопросы