在ggplot中从最小到最大排序堆积条形图的条形

Mic*_*nza 4 r ggplot2

有没有办法指定我希望堆积条形图的条形图与ggplot按照从最小到最大的四个因子的总和排序?(所以在下面的代码中,我想按所有变量的总和排序)我有一个数据帧中每个x值的总和,我融化了这个值以创建我构成图形的数据帧.

我用来绘制图表的代码是:

ggplot(md, aes(x=factor(fullname), fill=factor(variable))) + geom_bar()
Run Code Online (Sandbox Code Playgroud)

我当前的图表如下所示:

http://i.minus.com/i5lvxGAH0hZxE.png

最终的结果是我想要一个看起来有点像这样的图:

http://i.minus.com/kXpqozXuV0x6m.jpg

我的数据如下:

图表http://i.minus.com/izAmjF47yfsRQ.png中的数据

我把它融化成这种形式,每个学生都有每个类别的价值:

融化数据http://i.minus.com/i1rf5HSfcpzri.png

在使用以下行进行图表绘制之前

       ggplot(data=md, aes(x=fullname, y=value, fill=variable), ordered=TRUE) + geom_bar()+ opts(axis.text.x=theme_text(angle=90)) 
Run Code Online (Sandbox Code Playgroud)

现在,我不确定我是否了解Chi的排序方式,以及是否可以将其应用于我所拥有的任何一帧的数据.也许在我拥有的原始数据框架中对数据进行排序是有帮助的,这是我首先展示的数据框架.

更新:我们想通了.请参阅此主题以获得答案: 在ggplot中订购堆积条形图

chl*_*chl 6

我不确定你的数据是如何生成的(也就是说,你是否使用了reshape包中的cast/melt的组合,这是我怀疑给定的变量的默认名称),但这里是一个玩具示例,其中排序是在电话会议之外完成的ggplot.可能有更好的方法,按照@Andy的建议浏览SO.

v1 <- sample(c("I","S","D","C"), 200, rep=T)
v2 <- sample(LETTERS[1:24], 200, rep=T)
my.df <- data.frame(v1, v2)
idx <- order(apply(table(v1, v2), 2, sum))

library(ggplot2)
ggplot(my.df, aes(x=factor(v2, levels=LETTERS[1:24][idx], ordered=TRUE),
       fill=v1)) + geom_bar() + opts(axis.text.x=theme_text(angle=90)) +
       labs(x="fullname")
Run Code Online (Sandbox Code Playgroud)

要反向排序,请decr=TRUE使用order命令添加.此外,正如@Andy所建议的那样,您可以通过添加+ coord_flip()而不是opts()选项来克服x标签重叠的问题.

在此输入图像描述

  • `ggplot(my.df,aes(x = reorder(v2,rep(1,length(v2)),sum),fill = v1))+ geom_bar()+ opts(axis.text.x = theme_text(angle = 90))+ labs(x ="fullname")`对我有用(没有对因子进行任何其他重新排序) (3认同)