You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在circlize::chordDiagram中添加轨迹展示多维度数值数据

用circlize实现带基因环形图层的弦图

核心思路

放弃highlight.section,改用circos.track分层绘制自定义环形图层,结合colorRamp2生成渐变配色并添加对应图例。以下是完整可运行的代码示例:


1. 加载依赖包与构造示例数据

library(circlize)
library(RColorBrewer)

# 弦图连接数据(基因-通路对应关系)
chord_data <- data.frame(
  source = rep(c("GeneA", "GeneB", "GeneC"), each = 2),
  target = rep(c("Pathway1", "Pathway2"), 3),
  value = sample(1:10, 6)
)

# 基因的数值数据(包含value1/value2/value3,对应log2FC或FDR)
gene_values <- data.frame(
  Gene = c("GeneA", "GeneB", "GeneC"),
  value1 = rnorm(3, 2, 1),  # 示例log2FC数据
  value2 = rnorm(3, 0, 1),
  value3 = rnorm(3, -2, 1)  # 示例FDR数据
)

2. 初始化画布与绘制基础弦图

circos.clear()
# 设置画布参数:扇区间隙、轨道边距、起始角度
circos.par(gap.degree = 5, track.margin = c(0.02, 0.02), start.degree = 90)

# 定义扇区颜色:基因用灰色,通路用区分色
sector_colors <- c(GeneA = "#cccccc", GeneB = "#cccccc", GeneC = "#cccccc",
                   Pathway1 = "#1f78b4", Pathway2 = "#33a02c")

# 绘制基础弦图,带箭头方向
chordDiagram(chord_data, grid.col = sector_colors, transparency = 0.3,
             direction.type = "arrows", link.arr.type = "big.arrow")

3. 创建数值-颜色渐变映射

# 为每个value生成渐变配色,按需调整极值范围
col_value1 <- colorRamp2(c(min(gene_values$value1), 0, max(gene_values$value1)), 
                        c("blue", "white", "red"))  # log2FC常用蓝红渐变
col_value2 <- colorRamp2(c(min(gene_values$value2), 0, max(gene_values$value2)), 
                        c("green", "white", "purple"))
col_value3 <- colorRamp2(c(min(gene_values$value3), 0, max(gene_values$value3)), 
                        c("yellow", "white", "red"))  # FDR常用黄红渐变

4. 添加基因内侧环形图层(value1/value2)

# 在靠近中心的轨道绘制value1和value2的环形
circos.track(ylim = c(0, 1), track.height = 0.1, bg.border = NA, track.index = 2,
             panel.fun = function(x, y) {
               sector_name <- get.cell.meta.data("sector.index")
               # 仅处理基因扇区
               if(grepl("Gene", sector_name)) {
                 # 获取当前基因的对应数值
                 val1 <- gene_values$value1[gene_values$Gene == sector_name]
                 val2 <- gene_values$value2[gene_values$Gene == sector_name]
                 
                 # 归一化数值为环形宽度(按最大绝对值3缩放,可按需调整)
                 width1 <- abs(val1)/3 * 0.4
                 width2 <- abs(val2)/3 * 0.4
                 
                 # 绘制value1环形
                 circos.rect(get.cell.meta.data("xlim")[1], 0.1, 
                             get.cell.meta.data("xlim")[2], 0.1 + width1,
                             col = col_value1(val1), border = NA)
                 # 绘制value2环形(与value1留间隙)
                 circos.rect(get.cell.meta.data("xlim")[1], 0.1 + width1 + 0.02, 
                             get.cell.meta.data("xlim")[2], 0.1 + width1 + 0.02 + width2,
                             col = col_value2(val2), border = NA)
               }
             })

5. 添加基因外侧环形图层(value3)

# 在最外层轨道绘制value3的环形
circos.track(ylim = c(0, 1), track.height = 0.1, bg.border = NA, track.index = 1,
             panel.fun = function(x, y) {
               sector_name <- get.cell.meta.data("sector.index")
               if(grepl("Gene", sector_name)) {
                 val3 <- gene_values$value3[gene_values$Gene == sector_name]
                 width3 <- abs(val3)/3 * 0.8
                 # 绘制在轨道上部(靠近画布边缘)
                 circos.rect(get.cell.meta.data("xlim")[1], 0.9 - width3, 
                             get.cell.meta.data("xlim")[2], 0.9,
                             col = col_value3(val3), border = NA)
               }
             })

6. 添加渐变图例

par(cex = 0.8)
# value1图例(log2FC)
colorlegend(col_value1, 
            at = seq(min(gene_values$value1), max(gene_values$value1), length.out = 5),
            legend_title = "value1 (log2-FC)", 
            x = 0.9, y = 0.9, width = 0.02, height = 0.2)
# value2图例
colorlegend(col_value2, 
            at = seq(min(gene_values$value2), max(gene_values$value2), length.out = 5),
            legend_title = "value2", 
            x = 0.9, y = 0.6, width = 0.02, height = 0.2)
# value3图例(FDR)
colorlegend(col_value3, 
            at = seq(min(gene_values$value3), max(gene_values$value3), length.out = 5),
            legend_title = "value3 (FDR)", 
            x = 0.9, y = 0.3, width = 0.02, height = 0.2)

关键调整点

  • 环形位置:通过track.index控制,数字越小越靠近画布外层,越大越靠近中心
  • 环形宽度:修改abs(val)/3 * 0.4中的系数,可调整环形的相对宽度
  • 配色方案:按需替换colorRamp2中的颜色向量,匹配数据含义
  • 图例位置:调整x和y参数,避免遮挡弦图内容

内容的提问来源于stack exchange,提问作者cmirian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 18:17:04