簡體   English   中英

在 ggplot2 堆積條形圖中按大小對堆棧進行排序

[英]Ordering stacks by size in a ggplot2 stacked bar graph

所以我有一大堆數據,我已經采樣作為下面的例子:

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 樣本數據的堆積條形圖

這對於像這樣的小數據集來說很好,但我的實際數據集中有大約 170 萬行。 它看起來非常豐富多彩,我可以看到特定序列在一個大小級別中占多數,但它非常混亂。

我希望能夠通過該序列的豐度為每個尺寸訂購彩色堆疊條。 即,其堆棧中豐度最高的條形位於每個堆棧的底部,而豐度最低的條形位於頂部。 這樣看起來應該更像樣。

關於如何在 ggplot2 中執行此操作的任何想法? 我知道 aes() 中有一個“order”參數,但我無法弄清楚它應該對我擁有的格式的數據做什么。

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

在此處輸入圖片說明

您還可以使用 ggplot 美學中的 group 參數來實現您的目標

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

如果您想做相反的事情,即在每個堆棧的 TOP 部分對堆棧中豐度最高的條形進行排序,然后在 Abundance for group 參數之前使用負號

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM