2017-08-13 152 views
2

我有一个分类x轴称为Category的数据框,yaxis是丰度,按Sequence排序。对于每个类别,我试图通过丰度重新排序堆栈,以便可以容易地看到哪个序列的底部比例最高,最高比例最低。ggplot2按y轴的比例排序分类堆积条纹

目前,我可以做一个条形图是这样的:

s<-"Sequence Abundance Category 
CAGTG 0.8 A 
CAGTG 0.2 B 
CAGTG 0.6 C 
CAGTG 0.3 D 
CAGTG 0.1 E 
GGGAC 0.1 A 
GGGAC 0.1 B 
GGGAC 0.3 C 
GGGAC 0.6 D 
GGGAC 0.1 E 
CTTGA 0.1 A 
CTTGA 0.7 B 
CTTGA 0.1 C 
CTTGA 0.1 D 
CTTGA 0.8 E" 

d<-read.delim(textConnection(s),header=T,sep=" ") 

g = ggplot(d,aes(x = Category, y = Abundance, fill = Sequence)) + 
     geom_bar(position = "fill",stat = "identity") 

我的数据非常类似:Ordering stacks by size in a ggplot2 stacked bar graph

但即使是试图重现该解决方案(下面的答案的步骤) ,它不会按比例重新排列堆栈:

d$Sequence <- reorder(d$Sequence, d$Abundance) 
d$Sequence <- factor(d$Sequence, levels=rev(levels(d$Sequence))) 
ggplot(d, aes(x=Category, y=Abundance, fill=Sequence)) + 
    geom_bar(stat='identity') 

我找不到我正在寻找的示例。非常感谢您的帮助!

回答

3

使用group美学来控制堆叠条的顺序。

s <- "Sequence Abundance Category 
CAGTG 0.8 A 
CAGTG 0.2 B 
CAGTG 0.6 C 
CAGTG 0.3 D 
CAGTG 0.1 E 
GGGAC 0.1 A 
GGGAC 0.1 B 
GGGAC 0.3 C 
GGGAC 0.6 D 
GGGAC 0.1 E 
CTTGA 0.1 A 
CTTGA 0.7 B 
CTTGA 0.1 C 
CTTGA 0.1 D 
CTTGA 0.8 E" 
d <- read.delim(textConnection(s), header=T, sep=" ") 

# Add the "group" aesthetic to control the order of the stacked bars 
g = ggplot(d,aes(x=Category, y=Abundance, fill=Sequence, group=Abundance)) + 
    geom_bar(position = "fill",stat = "identity") 
g 

enter image description here

+0

这完美地工作!非常感谢Marco,我一直在尝试这么久,甚至没有想过它可能了! – user971102