这个问题在这里已有答案:
更新了示例数据:
mydata <- read.table(header=TRUE, text="
Item Value Site
A 96 site1
B 1 site1
C 2 site1
A 1 site2
B 62 site2
A 19 site3
B 1 site3
C 11 site3
D 9 site3
")
我要做的是绘制一个堆积的条形图,并为每个站点重新排序项目变量,并按值列对其进行排序。因此,对于每个站点,具有最大百分比值的项目位于堆积条的底部,接着是下一个最大百分比值,依此类推。但是,我尝试了不同的方法,并且难以使用值列通过堆积条排列。
使用解决方案进行编辑:按照上面标记为答案的链接,使用geom_bar单独绘制每个条形图并添加重新排序功能 - aes(fill = reorder(Item,+ Value))
这对你有用
ggplot(data=my_data, aes(x=site, y=percentage, fill=reorder(substrate, percentage))) +
geom_bar(stat="identity", position="stack")
在fill参数中使用reorder
命令。
我认为forcats
是一个很好的方式,但在我们拥有它之前 - 或者当你只想使用没有库的基础R时,this更像是传统方法:
mydata$substrate <- factor(mydata$substrate, levels = unique(mydata$substrate[order(mydata$percentage)]))
ggplot(data=mydata, aes(x=site, y=percentage), fill= Substrate) +
geom_bar(stat="identity",aes(fill=substrate))