首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在函数中使用circlize::draw.sectors

在函数中使用circlize::draw.sectors
EN

Stack Overflow用户
提问于 2021-07-27 21:46:29
回答 1查看 23关注 0票数 0

我想用circlize包做一个RGB配色方案。首先,我尝试创建一个函数,这样我只需要输入颜色和扇区,该函数就可以完成这项工作

代码如下:

代码语言:javascript
复制
colorpallete <- function(color, x){
    draw.sector(get.cell.meta.data("cell.start.degree", sector.index = x),
        get.cell.meta.data("cell.end.degree", sector.index = x),
        rou1 = get.cell.meta.data("cell.top.radius", track.index = 1),
        rou2 = get.cell.meta.data('cell.bottom.radius', track.index = 3),
            col = adjustcolor(col = color, alpha.f = 0.2))

    draw.sector(get.cell.meta.data("cell.start.degree", sector.index = x),
        get.cell.meta.data("cell.end.degree", sector.index = x),
        rou1 = get.cell.meta.data("cell.top.radius", track.index = 1),
        rou2 = get.cell.meta.data('cell.bottom.radius', track.index = 2),
            col = adjustcolor(col = color, alpha.f = 0.2))
            
    draw.sector(get.cell.meta.data("cell.start.degree", sector.index = x),
        get.cell.meta.data("cell.end.degree", sector.index = x),
        rou1 = get.cell.meta.data("cell.top.radius", track.index = 1),
        rou2 = get.cell.meta.data('cell.bottom.radius', track.index = 1),
            col = adjustcolor(col = color, alpha.f = 0.2))
    }

circos.initialize(sectors, xlim = c(0, 1))
        for(i in 1:3) {
            circos.track(ylim = c(0, 1))
            }
colset = (c('blue', 'cyan', 'green', 'yellow', 'red', 'violet'))
sectors = letters[1:6]    
colorpallete(colset, sectors)

当我尝试运行代码时,它返回以下错误:

代码语言:javascript
复制
 Error: Length of `sector.index` should only be 1.

如何使函数与每个列表相对应,例如,当我调用函数时,只有'blue‘和'a’被调用,然后是'cyan‘和'b',等等。

非常感谢你提前

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-28 12:07:24

更新:我设法运行了这个函数:

代码语言:javascript
复制
colorpallete <- function(sectors, color){
        circos.initialize(sectors, xlim = c(0, 1))
        for(i in 1:3) {
            circos.track(ylim = c(0, 1))
            }
        for(i in 1:6){
        draw.sector(get.cell.meta.data("cell.start.degree", sector.index = sectors[i]),
            get.cell.meta.data("cell.end.degree", sector.index = sectors[i]),
            rou1 = get.cell.meta.data("cell.top.radius", track.index = 1),
            rou2 = get.cell.meta.data('cell.bottom.radius', track.index = 3),
                col = adjustcolor(col = color[i], alpha.f = 0.2))
    
        draw.sector(get.cell.meta.data("cell.start.degree", sector.index = sectors[i]),
            get.cell.meta.data("cell.end.degree", sector.index = sectors[i]),
            rou1 = get.cell.meta.data("cell.top.radius", track.index = 1),
            rou2 = get.cell.meta.data('cell.bottom.radius', track.index = 2),
                col = adjustcolor(col = color[i], alpha.f = 0.2))
                
        draw.sector(get.cell.meta.data("cell.start.degree", sector.index = sectors[i]),
            get.cell.meta.data("cell.end.degree", sector.index = sectors[i]),
            rou1 = get.cell.meta.data("cell.top.radius", track.index = 1),
            rou2 = get.cell.meta.data('cell.bottom.radius', track.index = 1),
                col = adjustcolor(col = color[i], alpha.f = 0.2))
        } circos.clear()}
sectors = letters[1:6]
colset = (c('blue', 'cyan', 'green', 'yellow', 'red', 'violet'))        
colorpallete(sectors, colset)

自定义一组扇区和颜色(无需为6)

代码语言:javascript
复制
colorpallete <- function(sectors, color){
    if(length(sectors) != length(color)){
        print("Error: sectors should have the same length as color")
        } else {
        circos.initialize(sectors, xlim = c(0, 1))
        for(i in 1:3) {
            circos.track(ylim = c(0, 1))
            }
        for(i in 1:length(sectors)){
            draw.sector(get.cell.meta.data("cell.start.degree", sector.index = sectors[i]),
            get.cell.meta.data("cell.end.degree", sector.index = sectors[i]),
            rou1 = get.cell.meta.data("cell.top.radius", track.index = 1),
            rou2 = get.cell.meta.data('cell.bottom.radius', track.index = 3),
                col = adjustcolor(col = color[i], alpha.f = 0.2))

        draw.sector(get.cell.meta.data("cell.start.degree", sector.index = sectors[i]),
            get.cell.meta.data("cell.end.degree", sector.index = sectors[i]),
            rou1 = get.cell.meta.data("cell.top.radius", track.index = 1),
            rou2 = get.cell.meta.data('cell.bottom.radius', track.index = 2),
                col = adjustcolor(col = color[i], alpha.f = 0.2))
            
        draw.sector(get.cell.meta.data("cell.start.degree", sector.index = sectors[i]),
            get.cell.meta.data("cell.end.degree", sector.index = sectors[i]),
            rou1 = get.cell.meta.data("cell.top.radius", track.index = 1),
            rou2 = get.cell.meta.data('cell.bottom.radius', track.index = 1),
                col = adjustcolor(col = color[i], alpha.f = 0.2))
            }
    circos.clear()
    }}
sectors = letters[1:4]
colset = (c('darkblue', 'blue', 'darkred', 'red'))
colorpallete(sectors, colset)

当然,sectorscolset需要具有相同的长度

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68546094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档