r - ggplot2 按 y 轴的比例对分类堆叠条进行排序

标签 r ggplot2 factors geom-bar

我有一个带有分类 x 轴的数据框,称为类别,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') 

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

最佳答案

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

关于r - ggplot2 按 y 轴的比例对分类堆叠条进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45664264/

相关文章:

r - R:ggplot2,我可以设置图标题来环绕并缩小文本以适合图吗?

R - 在网格中排列时如何更改图像的高度

r - ifelse 使因子 'forget' 成为其水平顺序

r - 安排邮件 R/Knitr 报告

r - Dplyr - 根据 R 中其他列中的最低值选择列中的值

r - 指示最大值并在 ggplot 上添加相应的标签

r - 连接因子并替换 R 中的名称

r - 在 R 中从数值变量创建类别变量

r - Dunnett 秩检验的成对相关性

r - 更改级别时如何保持 NA