如何在染色体图形上绘制位置

Wil*_*ton 13 plot r bioinformatics genetics

我想生成一个图,描绘我工作的有机体的14个线性染色体,用于在每条染色体上的特定位置用彩色条进行扩展.理想情况下,我想使用R,因为这是我遇到的唯一编程语言.

我已经探索了各种方法,例如使用GenomeGraphs,但我发现这比我想要的更复杂/显示比我所拥有的更多的数据(例如显示细胞质带)并且通常特异于人类染色体.

我基本上想要的是14个以下尺寸的灰色条:

chromosome           size
         1         640851
         2         947102
         3        1067971
         4        1200490
         5        1343557
         6        1418242
         7        1445207
         8        1472805
         9        1541735
        10        1687656
        11        2038340
        12        2271494
        13        2925236
        14        3291936
Run Code Online (Sandbox Code Playgroud)

然后用彩色标记描绘沿染色体长度散布的约150个位置.例如这些位置的标记:

Chromosome        Position
         3          817702
        12         1556936
        13         1131566
Run Code Online (Sandbox Code Playgroud)

理想情况下,我还希望能够根据基因座指定几种不同的颜色,例如

Chromosome        Position        Type
         3          817702           A
        12         1556936           A
        13         1131566           A
         5         1041685           B
        11          488717           B
        14         1776463           B
Run Code Online (Sandbox Code Playgroud)

例如,"A"标记为蓝色,"B"标记为绿色.

在该图像中粘贴了与我想要产生的非常相似的图(来自Bopp等人,PlOS Genetics 2013; 9(2):e1003293):

示例染色体图

任何人都可以推荐一种方法吗?它不一定必须是生物信息学包,如果有另一种方法我可以使用R生成14条特定比例尺寸的条,在条形图上的指定位置有标记.例如,我一直在考虑从ggplot2修改一个简单的条形图,但我不知道如何在特定位置沿着条形图标记.

the*_*ail 8

只需保存您的barplot通话,然后拨打电话segments即可在适当的位置进行标记.例如:

bp <- barplot(dat$size, border=NA, col="grey80")

with(marks,
  segments(
    bp[Chromosome,]-0.5,
    Position,
    bp[Chromosome,]+0.5,
    Position,
    col=Type,
    lwd=2, 
    lend=1
   )
)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

使用的数据:

dat <- structure(list(chromosome = 1:14, size = c(640851L, 947102L, 
1067971L, 1200490L, 1343557L, 1418242L, 1445207L, 1472805L, 1541735L, 
1687656L, 2038340L, 2271494L, 2925236L, 3291936L)), .Names = c("chromosome", 
"size"), class = "data.frame", row.names = c(NA, -14L))

marks <- structure(list(Chromosome = c(3L, 12L, 13L, 5L, 11L, 14L), Position = c(817702L, 
1556936L, 1131566L, 1041685L, 488717L, 1776463L), Type = structure(c(1L, 
1L, 1L, 2L, 2L, 2L), .Label = c("A", "B"), class = "factor")), .Names = c("Chromosome", 
"Position", "Type"), class = "data.frame", row.names = c(NA, 
-6L))
Run Code Online (Sandbox Code Playgroud)