绘制序列比对的坐标

时间:2017-04-14 17:47:31

标签: r

我想从R最近的出版物中重现这个数字,但我不确定如何。

enter image description here

情节的想法很简单。在顶部是全长病毒序列的表示,其下面的每一行描绘了测序的分离物。

对于每个序列,有两条信息:

  1. 序列的开始,结束,删除等 例如:序列1,从位置1开始,到9000位置结束 但序列2,从位置1开始,到2000年结束,中间一切都被删除,然后再次在8000-9000开始

  2. 根据是否删除,全长等进行颜色编码

  3. 最初我以为我可以使用条形图,就像我在Illustrator中绘制的那样,其中x基本上是每个序列线,y将是它映射的坐标。但我不确定这是否允许我指定"间隙",如插图画面中的序列3所示。

    enter image description here

    数据本身就是这样组织的:

    Sequence name    Mapped Start   Mapped End
    1                1              9000
    2                4000           9000 
    3                1              2000
    3                7000           9000
    

    数据集仅包括映射的开始和结束位置,而不包括已删除的位置。

    非常感谢听到您的意见!

    由于

1 个答案:

答案 0 :(得分:2)

我可能会建议使用一系列geoms,每个序列一个。如果您以某种方式组织数据,那将非常简单。例如,如果您的数据采用长格式,则如下所示:

dat <- data.frame(sequence=c(1,2,2,2), start=c(1,1,2001,8000), stop=c(9000,2000,7999,9000), type=c("mapped","mapped","deletion","mapped"))

看起来像......

sequence start stop     type
       1     1 9000   mapped
       2     1 2000   mapped
       2  2001 7999 deletion
       2  8000 9000   mapped

您可以执行以下操作:

library(ggplot2)

g <- ggplot(data=dat, mapping=aes(ymin=0, ymax=1, xmin=start, xmax=stop, fill=type)) +
geom_rect() + facet_grid(sequence~., switch="y") +
labs(x="Position (BP)", y="Sequence / Strain", title="Mapped regions for all sequences") +
theme(axis.text.y=element_blank(), axis.ticks.y=element_blank()) +
theme(plot.title = element_text(hjust = 0.5))

看起来像this