所以我有大量数据,我已采样作为下面的示例:
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”参数,但我无法弄清楚它应该如何处理我所拥有的格式的数据。
最佳答案
在 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)
关于r - 在 ggplot2 堆积条形图中按大小对堆栈进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9227389/