r - 在 ggplot2 堆积条形图中按大小对堆栈进行排序

标签 r ggplot2 bar-chart stackedbarseries

所以我有大量数据,我已采样作为下面的示例:

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”参数,但我无法弄清楚它应该如何处理我所拥有的格式的数据。

最佳答案

在 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")

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

关于r - 在 ggplot2 堆积条形图中按大小对堆栈进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9227389/

相关文章:

r - 为什么 R 'sample' 某些列比其他列多?

r - 使用更少的代码进行脑筋急转弯

r - 基于其他列中的字符串的虚拟变量列

r - 有没有办法使用ggplot更改GGally::ggpairs的调色板?

r - 更改图例标题会破坏 ggplot2 中的图例颜色

R 编程 : creating a stacked bar graph,,每个堆叠条的颜色可变

reshape 相关矩阵,每对变量仅包含一次

r - 将 geom_text 放置在 geom_col 堆叠条形图中每个条形段的中间

c# - 创建堆积条形图

python - 带有 matplotlib 的长垂直条形图