【问题标题】:supplying user defined color in r circlize package在 r circlize 包中提供用户定义的颜色
【发布时间】:2014-11-25 17:06:01
【问题描述】:

我正在尝试使用 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).

【问题讨论】:

    标签: r plot geometry circlize


    【解决方案1】:

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

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

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

    顺便说一句,如果您使用的是最新版本的 circlize (0.1.3),请将 circos.par 中的 default.track.height 替换为 track.height

    【讨论】:

      【解决方案2】:

      您可以创建一个新列,其中每一行与一种颜色或相同颜色的不同值相关联。 例如,您可以创建一个空向量,并使用一个循环来解析您的所有 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)
      })
      

      【讨论】:

        猜你喜欢
        • 2022-06-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-06
        • 2010-10-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多