2017-08-13 154 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