14

所以我有大量数据,我在下面采样了这些数据:

Sequence  Abundance   Length
CAGTG    3       25
CGCTG    82      23
GGGAC    4       25
CTATC    16      23
CTTGA    14      25
CAAGG    9       24
GTAAT    5       24
ACGAA    32      22
TCGGA    10      22
TAGGC    30      21
TGCCG    25      21
TCCGG    2       21
CGCCT    22      24
TTGGC    4       22
ATTCC    4       23

我在这里只显示每个序列的前 4 个单词,但实际上它们是“长度”长的。我正在查看我在这里拥有的每个大小类别的序列丰度。此外,我想可视化特定序列在其大小类别中所代表的丰度比例。目前,我可以制作这样的堆叠条形图:

ggplot(tab, aes(x=Length, y=Abundance, fill=Sequence)) 
  + geom_bar(stat='identity') 
  + opts(legend.position="none")

ggplot 样本数据的堆积条形图

这对于像这样的小型数据集来说很好,但我的实际数据集中大约有 170 万行。它看起来非常丰富多彩,我可以看到特定序列在一个大小类别中占多数,但它非常混乱。

我希望能够通过该序列的丰度为每个尺寸订购彩色堆叠条。即在它们的堆栈中具有最高丰度的条位于每个堆栈的底部,而具有最低丰度的条位于顶部。这样看起来应该更漂亮。

关于如何在 ggplot2 中执行此操作的任何想法?我知道 aes() 中有一个“订单”参数,但我无法弄清楚它应该如何处理我拥有的格式的数据。

4

2 回答 2

18

在 ggplot2 的堆叠条形图中绘制条形图的顺序(从下到上)基于定义组的因子的顺序。因此,Sequence必须根据 对因子重新排序Abundance。但要获得正确的堆叠顺序,必须颠倒顺序。

ab.tab$Sequence <- reorder(ab.tab$Sequence, ab.tab$Abundance)
ab.tab$Sequence <- factor(ab.tab$Sequence, levels=rev(levels(ab.tab$Sequence)))

现在使用你的代码给出你要求的情节

ggplot(ab.tab, aes(x=Length, y=Abundance, fill=Sequence)) +
  geom_bar(stat='identity') +
  opts(legend.position="none")

在此处输入图像描述

但是,我可能会推荐一些稍微不同的东西。由于您正在抑制将颜色映射到序列的比例,并且您的描述似乎表明您无论如何都不关心特定序列(并且会有很多),为什么不把那部分排除在外呢?只需绘制条的轮廓,无需任何填充颜色。

ggplot(ab.tab, aes(x=Length, y=Abundance, group=Sequence)) +
  geom_bar(stat='identity', colour="black", fill=NA)

在此处输入图像描述

于 2012-02-10T16:54:44.513 回答
2

您还可以在 ggplot 的美学中使用 group 参数来实现您的目标

ggplot(ab.tab, aes(x=Length, y=Abundance, fill=Sequence, group=Abundance)) + geom_bar(stat='identity')

如果您想做相反的事情,即在每个堆栈的顶部部分将其堆栈中丰度最高的条排序,然后在组参数的丰度之前使用负号

ggplot(ab.tab, aes(x=Length, y=Abundance, fill=Sequence, group=-Abundance)) + geom_bar(stat='identity')

于 2020-11-21T06:26:25.763 回答