2010-10-22 54 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中使用「order」的帖子,但似乎沒有效果。

我正在尋找與「訂單」欄內容相符的休息排序。

似乎有一個類似的問題How to change the order of discrete x scale in ggplot,但坦率地說,不明白在這方面的答案。

+1

FYI:這是人們更容易回答,如果你使用'dput'並添加數據的小樣本到您的文章的末尾(或者使用可用的全局來自基礎R中'datasets'包的數據集)。 – Shane 2010-10-22 20:33:43

+0

變量是一個字符還是一個因子? – 2010-10-22 20:39:17

+0

變量是一個因素。我要看看下面的答案...... – 2010-10-22 23:15:10

回答

6

嘗試:

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

來源:ggplot2 sorting a plot Part II

+0

看起來這是最簡單的解決方案。謝謝 – 2010-10-22 23:27:15

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

謝謝。這解決了它。希望有一個內置的訂單屬性的方法,但我想不會是一個廣泛使用的功能。 – 2010-10-22 23:25:42

4

更短,更容易理解:

data$Variable <- reorder(data$Variable, data$order)