1

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

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

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

在此处输入图像描述

我尝试从之前的绘图中获取 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) 覆盖一个全新的图,但我无法让它与我之前的图完全重叠,因为它会重新调整以适应整个圆圈(虽然我只为更广泛的区域定义了一些段)。如果有人对如何在 RI 中的 circlize 中绘制这个覆盖区域(使用定义这些更宽区域的不同数据集)有指导,将非常感激!

感谢您的帮助!

4

1 回答 1

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

在此处输入图像描述

于 2015-04-18T06:22:16.093 回答