因此,我有大量的数据,下面是我采样的一个例子:
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“参数,但我不知道它应该如何处理我拥有的格式的数据。
发布于 2012-02-11 00:54:45
在ggplot2中,条形图在堆叠条形图中的绘制顺序(从下到上)取决于定义组的因子的顺序。因此,必须根据Abundance对Sequence因子进行重新排序。但是为了获得正确的堆叠顺序,必须颠倒顺序。
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)

发布于 2020-11-21 14:26:26
您还可以使用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=-丰度))+ geom_bar(stat='identity')
https://stackoverflow.com/questions/9227389
复制相似问题