2013-02-26 197 views
4

我有這樣的R代碼裏面的代碼生成以下barplot:排序barplot列ggplot

d <- data.frame(case = c(1,2,3,4), 
       var=c('foo', 'foo', 'foo', 'foo','bar', 'bar', 'bar', 'bar'), 
       val=c(9,2,2,4,6,1,2,3)) 
d$var <- as.factor(d$var) 
d$case <- as.factor(d$case) 
ggplot(d, aes(x = case, y = val, fill = var)) + scale_x_discrete() + geom_bar(position="dodge") 

enter image description here

我怎樣才能通過「酒吧」的價值吧排序?

免責聲明:這可能是https://stackoverflow.com/questions/10746342/sorting-ggplot2-box-plot-by-2-columns重複,但這沒有得到回答,所以...

+0

@Arun我想你只需要修改你的答案中'foo'的''通過val' case'水平排序,但我同意這個問題不是很清楚。 – joran 2013-02-26 16:54:52

+0

@阿倫,感謝您的回答,我真正想要的是,我想按照案例分類列,而不是每個案例。在我的例子中,如果我按照'bar'的值排序吧,我希望按以下順序顯示這些案例:1,4,3,2 – 2013-02-26 17:02:21

+0

Arun基本上向您展示了方法,即使他誤讀了你想分類。只需按照需要的順序指定'case'的級別即可。 – joran 2013-02-26 17:09:20

回答

5

使用order度日值排序的列barfoo複製它。然後使用此列爲x

d$case <- match(d$val[d$var == "bar"], sort(d$val[d$var == "bar"])) 
d$case <- factor(d$case, levels=1:4) 
# now use this: 
ggplot(d, aes(x = case, y = val, fill = var)) + 
     geom_bar(position="dodge", stat="identity") 

(或相當於)

ggplot(d, aes(x= order, fill = var)) + geom_bar(aes(weights=val), position="dodge") 

enter image description here

+0

如果不能看到這個按值或'bar'排序吧...... – 2013-02-26 16:52:20

+0

@GeorgiosGousios,完全誤讀了這個問題。現在編輯。 – Arun 2013-02-26 16:57:27

+0

這就是我期待的。非常感謝! – 2013-02-26 17:12:15