ggplot2按y轴的比例排序分类堆积条

Posted

技术标签:

【中文标题】ggplot2按y轴的比例排序分类堆积条【英文标题】:ggplot2 order categorical stacked bars by proportions of y-axis 【发布时间】:2018-01-21 16:29:14 【问题描述】:

我有一个带有分类 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') 

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

【问题讨论】:

这能回答你的问题吗? Ordering stacks by size in a ggplot2 stacked bar graph @tjebo 我不确定这是不是目标的副本。这篇文章要求对每个栏中的填充重新排序。相比之下,目标要求对所有条形的填充重新排序。 @IanCampbell 很公平。我认为将这些问题联系起来是值得的:) 【参考方案1】:

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

【讨论】:

这很完美!非常感谢 Marco,我已经尝试了这么久,甚至认为这不可能了!

以上是关于ggplot2按y轴的比例排序分类堆积条的主要内容,如果未能解决你的问题,请参考以下文章

堆积条形图,按总计(值的总和)重新排序,而不是值 ggplot2 + dplyr

堆叠条形图 ggplot2 - 重新排序填充

按频率/值排序离散 x 比例

如何在条形图上更正 R 中 y 轴的比例和顺序

带有 facet_grid 的 ggplot2 中具有多个分类变量的堆积条形图

带有ggplot2的发散堆积条形图:图例中的因子排序问题