所以我有一些数据,我在下面作为例子采样:
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")
对于这样的小数据集来说这很好,但我的实际数据集中有大约170万行。它看起来非常丰富多彩,我可以看到特定的序列在一个大小的类中占多数,但它非常混乱。
我希望能够按照该序列的丰度为每个尺寸订购彩色堆叠条。即,堆叠中具有最高丰度的条形位于每个堆叠的底部,而具有最低丰度的条形位于顶部。它应该看起来更加流畅。
关于如何在ggplot2中执行此操作的任何想法?我知道aes()中有一个“order”参数,但是我无法弄清楚它应该以我所拥有的格式处理数据。
答案 0 :(得分:13)
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)
答案 1 :(得分:0)
您还可以在ggplot的美学效果中使用group参数来实现目标
ggplot(ab.tab,aes(x =长度,y =丰度,填充=序列,组=丰度))+ geom_bar(stat ='identity')
如果要执行相反的操作,即在每个堆栈的TOP部分中将其堆栈内具有最高丰度的条形排序,则在组参数的丰度之前使用负号
ggplot(ab.tab,aes(x = Length,y = Abundance,fill = Sequence,group = -Abundance))+ geom_bar(stat ='identity')