【问题标题】:Grouping track in the package circlize in R包中的分组轨道在R中循环
【发布时间】:2015-04-14 00:06:12
【问题描述】:

我在这里创建了一个类似于 circlize 教程第 8 页的情节: http://cran.r-project.org/web/packages/circlize/vignettes/genomic_plot.pdf

现在我正在尝试在基因名称之上覆盖一个额外的轨道,它显示将基因分组到更大的类别中(在下面的小插图中,我正在尝试添加蓝线,希望得到带有circlize的更漂亮的图像)。

我有一个新的数据框,其中包含每个更宽区域的起点和终点,以及标签(我试图在这些区域之上添加标签)。

我尝试从之前的绘图中获取 xlim、ylim 和索引信息,但我遇到了问题,因为它是一个新的数据框。

这就是我正在做的事情:假设我的新数据框(与主数据具有相同的坐标)是这样的:

df = structure(list(Chr = c("chr1", "chr10", "chr12"), pos.start = c(2e+06, 2e+06, 2e+06), pos.end = c(3e+06, 6e+06, 3e+06), name = c("A", "B", "C")), .Names = c("Chr", "pos.start", "pos.end", "name"), row.names = c(1L, 2L, 3L), class = "data.frame")

使用我的主要数据集初始化马戏团后,它是示例小插图中的基因因素,我正在尝试像这样添加轨道:

circos.trackPlotRegion(ylim = c(0.5, 0.5), track.index=1,
panel.fun = function(x, y) {
chr = get.cell.meta.data("sector.index")
# find regions in this chromosome
regions  = unique(df[df$Chr == chr, , drop = FALSE]$name)
df2 = df[df$Chr == chr, , drop = FALSE]
for(i in seq_len(nrow(df2))) {
   region = which(regions %in% df2$name[i])
   circos.rect(region, 0.2, 
          region, 0.2, color="blue", border = NA)
}
}, bg.border = NA)

而且我不断收到此错误: “if (ncut) { 中的错误:参数不可解释为逻辑”。

我做错了什么?

我还尝试使用 par(new = TRUE) 覆盖一个全新的图,但我无法让它与我之前的图完全重叠,因为它会重新调整以适应整个圆圈(虽然我只定义了一些线段更广泛的地区)。 如果有人对如何在 R 中的 circlize 中绘制这个覆盖区域(使用定义这些更宽区域的不同数据集)有指导,我将非常感激!

感谢您的帮助!

【问题讨论】:

    标签: r plot circlize


    【解决方案1】:

    如果您想覆盖整个行业,例如如果你想画一条线覆盖两个基因(每个基因在图中都是一个扇区),你可以试试highlight.sector()circlize是最近添加的功能,您可以将circlize更新到最新版本。

    要使用highlight.sector(),您应该首先创建一个轨道(高度非常小),然后通过指定轨道和扇区的索引来突出显示该轨道中的两个基因。一个简单的例子如下(左图):

    #########################################
    # example 1: cover the whole sectors
    o.cell.padding = circos.par("cell.padding")
    
    circos.initializeWithIdeogram(plotType = NULL)
    circos.trackPlotRegion(ylim = c(0, 1), track.height = 0.01, bg.border = NA, 
        cell.padding = c(0, o.cell.padding[2], 0, o.cell.padding[4]))
    circos.trackPlotRegion(ylim = c(0, 1))
    
    highlight.sector(sector.index = c("chr1", "chr2"), track.index = 1, 
        col = "red", border = NA)
    circos.clear()
    

    如果您只想突出显示部分扇区,则应改用draw.sector()draw.sector()rect() 一样,需要两个角的坐标(在极坐标系中测量)。但是,正确坐标的计算有点棘手。 circlize() 函数将通过从每个单元格中的数据坐标转换为您提供极坐标。但是您需要将数据点映射到正确的扇区。您可能会从以下示例中看到这个想法(右图)

    ############################################
    # example 2: cover only part of the sectors
    o.cell.padding = circos.par("cell.padding")
    
    circos.initializeWithIdeogram(plotType = NULL)
    circos.trackPlotRegion(ylim = c(0, 1), track.height = 0.01, bg.border = NA, 
        cell.padding = c(0, o.cell.padding[2], 0, o.cell.padding[4]))
    circos.trackPlotRegion(ylim = c(0, 1))
    
    pos1 = circlize(1e8, 0, sector.index = "chr1", track.index = 1)
    pos2 = circlize(1e8, 1, sector.index = "chr2", track.index = 1)
    draw.sector(pos1[1, "theta"], pos2[1, "theta"], pos1[1, "rou"], pos2[1, "rou"], 
        clock.wise = TRUE, col = "red", border = NA)
    circos.clear()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-02
      • 2012-11-04
      相关资源
      最近更新 更多