2012-02-10 126 views
11

所以我有我已采样为下面的示例性数据的负载:订货堆叠由大小在GGPLOT2堆积条形图

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 stacked bar graph of the sample data

这是罚款,一个小数据集是这样,但是我有我的实际数据集大约170万行。它看起来非常丰富多彩,我可以看到特定的序列在一个尺寸类别中占据了大多数,但它非常混乱。

我希望能够按照该序列的丰度为每个尺寸订购彩色堆积条。即在其堆叠中具有最高丰度的条块位于每个堆叠的底部,而具有最低丰度的条块位于顶部。它应该看起来更像这个样子。

关于如何在ggplot2中做到这一点的任何想法?我知道aes()中有一个“order”参数,但我无法弄清楚它应该如何处理我拥有格式的数据。

+1

@ GSK3 - 我觉得OP的要求的东西稍有不同在这里。我认为kukimbob不是要在总高度上排列酒吧,而是要求如何为每个酒吧内的彩色块排序,并将最大值放在底部,将x轴减小,将最小值放在顶部。 (即,每个小节内的颜色的排序可能在小节中很不相同)。 – 2012-02-10 14:59:11

+0

@ JoshO'Brien完全正确! x轴上的顺序很好:从最小长度到最长。我只是想能够操纵每个栏中彩色堆栈的顺序。 – MattLBeck 2012-02-10 15:15:26

+0

啊,这绝对是一个不同的问题。道歉。 – 2012-02-10 16:13:04

回答

10

在ggplot2中堆叠barplot中绘制条形图(从底部到顶部)的顺序基于定义组的条件因子的顺序。因此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") 

enter image description here

我可能会建议,然而,一些略有不同。既然你压制了将颜色映射到序列的尺度,并且你的描述似乎表明你并不关心具体的顺序(并且会有很多),为什么不把这部分留下呢?只需绘制没有任何填充颜色的条形轮廓。

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

enter image description here

+0

这很好用,谢谢!而且你的建议比我目前的建议好得多,因为对于不同大小的不同读取而言,相同的颜色使得解释混淆不清。 – MattLBeck 2012-02-13 12:03:17

+0

您如何按每列进行排序? – 2015-09-30 22:04:42

+0

@AlexT我不认为有可能在不同的酒吧中以不同的方式对酒吧内的类别进行排序。 – 2015-10-09 18:35:24