使用ggplot2绘制不同长度的多行

时间:2016-05-13 23:26:02

标签: r plot ggplot2

我有一个2228 x 2 data.frame看起来像这样:

> head(diffSums, 10)
                               nTranscripts        Library
D6_NoSort_2250b_ATTATACGCCCC          63963   NoSort_2250b
D6_EcadSort_6000b_CCACACCCAGCC       193050 EcadSort_6000b
D6_EcadSort_2250b_CCGATGATTAGC        77631 EcadSort_2250b
D6_EcadSort_2250b_TGTCTGCTTTAG       106599 EcadSort_2250b
D6_EcadSort_2250b_TTCACAAGTTTC        88775 EcadSort_2250b
D6_EcadSort_6000b_CCATATCCAGCT        97861 EcadSort_6000b
D6_EcadSort_6000b_CAACGACTTAGG        91813 EcadSort_6000b
D6_EcadSort_2250b_AGTGAACAGGCG        80503 NoSort_2250b
D6_EcadSort_2250b_AAGCGGCTGCGC        93326 EcadSort_2250b
D6_EcadSort_2250b_CGTTTCACTTCG        72013 NoSort_2250b

每个diffSums$Library的条目数变化:

> table(diffSums$Library)

  EcadSort_2250b EcadSort_2250x8b   EcadSort_6000b EcadSort_6000x3b     NoSort_2250b  NoSort_2250x23b   NoSort_2250x8b     NoSort_6000b   NoSort_6000x3b 
             136              321              131              422              269               72              452              192              233 

我想使用ggplot2在同一个地块上为每个库绘制一条线。我可以通过手动grep&n 39出每个库并绘制:

来实现这一目标
ggplot() + 
  geom_line(data=diffSums[grep("EcadSort_6000x3b", rownames(diffSums)),], aes(x=seq(as.vector(table(diffSums$Library))[4]), y=sort(nTranscripts, decreasing=TRUE)), color='green') +
  geom_line(data=diffSums[grep("NoSort_2250b", rownames(diffSums)),], aes(x=seq(as.vector(table(diffSums$Library))[5]), y=sort(nTranscripts, decreasing=TRUE)), color='blue')

...但我知道必须有一个更简单的方法!任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

仍然无法重现使用所提供的数据和代码生成的图表,但我认为这正是您所需要的:

library(dplyr)

diffSums <- diffSums %>%
    group_by(Library) %>%
    arrange(-nTranscripts) %>%
    mutate(numLib = seq_len(n()))

ggplot(diffSums, aes(numLib,nTranscripts,colour = Library)) + geom_line()

enter image description here