0

我正在尝试使用 R 中的 circlize 包创建圆图。

这里我使用随机颜色的示例:

require(circlize)

circos.par("default.track.height" = 0.1, cell.padding = c(0, 0, 0, 0))
circos.initializeWithIdeogram(plotType = NULL)

bed1 = generateRandomBed(nr = 10)

f = colorRamp2(breaks = c(-1, 0, 1), colors = c("green", "black", "red"))

rand_col = function(k) {
    return(rgb(runif(k), runif(k), runif(k)))
}

circos.genomicTrackPlotRegion(bed1, stack = FALSE,  numeric.column=4, panel.fun = function(region,  value, ...) {
    circos.genomicRect(region, value, col = rand_col(nrow(region)), border = NA, ...)
})

会导致如下图:

在此处输入图像描述

现在我想传递自己的颜色 - 不是像以前那样随机生成。

bed1$clr <- sample(c("red", "green", "blue", "purple", "red",
              "yellow", "blue", "red", "green", "cyan"), nrow(bed1), replace=TRUE)

circos.genomicTrackPlotRegion(bed1, stack = FALSE,  numeric.column=4, panel.fun = function(region,  value,  ...) {
    circos.genomicRect(region, value, col = bed1$clr, border = NA, ...)
})

但命中错误:

Error in .normalizeGraphicalParam(col, 1, nr, "col") : 
  The length of `col` (19) should be equal to 1 or the number of your regions (1).
4

2 回答 2

1

in panel.fun,regionvalue对应每条染色体上的数据,所以不能使用bed1$clr,因为bed1$clr对应整个数据。

实际上, inpanel.fun包含value除 in 前三列之外的列,bed1并且仅包含当前染色体的数据(记住panel.fun应用于每个染色体),因此您可以将代码更改为:

circos.genomicTrackPlotRegion(bed1, panel.fun = function(region,  value,  ...) {
    circos.genomicRect(region, value, col = value$clr, border = NA, ...)
})

顺便说一句,如果您使用的是(0.1.3)的最新版本,请替换default.track.heighttrack.heightin 。circos.parcirclize

于 2014-11-26T17:59:51.900 回答
0

您可以创建一个新列,其中每一行与一种颜色或相同颜色的不同值相关联。例如,您可以创建一个空向量,并使用一个循环来解析您的所有 data.frame。在这种情况下,当循环找到一个值 == 1 时,它将颜色“黑色”添加到向量中,当找到一个值 == 2 时,它添加颜色“红色”,依此类推。

vector <- c()
for(i in seq(nrow(test))){
  if (test$Color[i] == 1){
  vector <- c(vector, "black")}
  if (test$Color[i] == 2){
  vector <- c(vector, "red")}
}

之后,您可以在原始 data.frame 中添加该列,如下所示:

test["paint"] <- vector

最后,您可以在边框选项中添加带有所选颜色的列。

circos.par("track.height" = 0.1, cell.padding = c(0, 0, 0, 0))
circos.initializeWithIdeogram(chromosome.index = chrom)
bed = test
circos.genomicTrackPlotRegion(test, panel.fun = function(region, value, ...) {
circos.genomicRect(region, value, border = bed$paint)
})
于 2015-09-09T15:43:08.000 回答