有没有办法指定我希望堆积条形图的条形图与ggplot按照从最小到最大的四个因子的总和排序? (所以在下面的代码中,我想按所有变量的总和排序)我有一个数据帧中每个x值的总和,我融化了这个值以创建从中形成图形的数据帧。
我用来绘制图表的代码是:
ggplot(md, aes(x=factor(fullname), fill=factor(variable))) + geom_bar()
我目前的图表如下:
http://i.minus.com/i5lvxGAH0hZxE.png
最终结果是我希望有一个看起来有点像这样的图表:
http://i.minus.com/kXpqozXuV0x6m.jpg
我的数据如下:
data in chart http://i.minus.com/izAmjF47yfsRQ.png
我把它融合到这个表格中,每个学生都有每个类别的价值:
melted data 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))
现在,我不确定我是否了解Chi的排序方式,以及是否可以将其应用于我所拥有的任何一帧的数据。也许在我拥有的原始数据框架中对数据进行排序是有帮助的,这是我首先显示的数据框架。
更新:我们明白了。请参阅此主题以获得答案: Order Stacked Bar Graph in ggplot
答案 0 :(得分: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")
要反向排序,请使用decr=TRUE
命令添加order
。另外,正如@Andy建议的那样,您可以通过添加+ coord_flip()
而不是opts()
选项来克服x标签重叠的问题。