我在这里创建了一个类似于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之后,如示例vignette所示,我尝试像这样添加轨迹:
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)我一直收到这样的错误:"Error in if (ncut) {:参数不能解释为逻辑“。
我做错了什么?
我还尝试使用par(new = TRUE)覆盖整个新的绘图,但我不能让它与我之前的绘图完全重叠,因为它会重新缩放以适应整个圆(虽然我只为更宽的区域定义了一些线段)。如果有人对如何在R中绘制覆盖区域(使用不同的数据集定义这些更宽的区域)有什么建议,我将非常感谢!
谢谢你的帮助!
发布于 2015-04-18 14:22:16
如果你想覆盖整个区域,例如,如果你想画一条线来覆盖两个基因(每个基因都是图中的一个区域),你可以尝试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()。与rect()一样,draw.sector()需要两个角的坐标(以极坐标系统测量)。然而,计算正确的坐标有点棘手。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()

https://stackoverflow.com/questions/29617050
复制相似问题