ggplot2如何按照y轴比例排序分类堆叠条形图

4

我有一个包含分类的数据框,x轴列名为Category,y轴列名为Abundance,按Sequence进行颜色编码。对于每个Category,我要重新排序stacks,以便可以轻松地可视化哪个序列在底部具有最高比例,在顶部具有最低比例。

目前,我可以制作这样的条形图:

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")

我的数据与这个非常相似:在ggplot2堆栈条形图中按大小排序堆栈

但是,即使尝试复制该解决方案(按照答案中的步骤进行),它也不会按比例重新排序堆栈:

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') 

我找不到我想要的示例。非常感谢任何帮助!


1
这个回答解决了你的问题吗?在ggplot2堆积条形图中按大小排序堆栈 - tjebo
@tjebo 我不确定这是否是目标的重复。这篇文章正在询问如何重新排列每个条形图中的填充。相比之下,目标是要求在所有条形图中重新排序填充。 - Ian Campbell
@IanCampbell 好的,我认为将这些问题链接起来是值得的 :) - tjebo
1个回答

7
使用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


这个完美地运行了!非常感谢你,Marco。我已经尝试了很长时间,甚至不认为这还有可能! - user971102

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接