条形图排序 ggplot

4

我有这样一段R代码,用于生成以下条形图:

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

如何按照“bar”值对条形图进行排序?

免责声明:这可能是https://stackoverflow.com/questions/10746342/sorting-ggplot2-box-plot-by-2-columns的重复,但该问题未得到解答,因此...


@Arun 我认为你只需要修改你的答案,按照 fooval 的级别对 case 进行排序,但我同意这个问题并不是非常清楚。 - joran
@Arun,感谢您的回答,我真正想表达的是我想按照案例而不是按大小写来排序列。在我的例子中,如果我“按bar的值对bar进行排序”,我希望案例按照以下顺序显示:1、4、3、2。 - Georgios Gousios
Arun基本上已经为您指明了方向,尽管他误读了您想要排序的方式。只需按所需顺序指定“case”的级别即可。 - joran
好的,经过足够多的尝试,现在我认为我弄对了。感谢@joran澄清问题。 - Arun
1个回答

5

使用order按值对bar中的列进行排序,并在foo中复制。然后使用此列作为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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接