我正在尝试使用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).
答案 0 :(得分:0)
panel.fun
中的,region
和value
对应于每条染色体上的数据,因此您无法使用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, ...)
})
BTW,如果您使用的是最新版本的default.track.height
(0.1.3),请将track.height
替换为circos.par
中的circlize
。
答案 1 :(得分:0)
您可以创建一个新列,其中每一行与一种颜色或相同颜色的不同值相关联。 例如,您可以创建一个空向量,并使用一个解析所有data.frame的循环。在这种情况下,当循环找到值== 1时,它会添加颜色&#34; black&#34;到向量时,当找到值== 2时,它会添加颜色&#34;红色&#34;等等。
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)
})