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

如何为chordDiagram添加两个数据集的分区域标题?

为ChordDiagram添加分数据集标题的两种实现方式

方式一:环绕对应半区外侧的文本标题

利用circlize的circos.text()函数结合角度定位,让标题文本环绕对应半区外侧显示。需要先通过预留轨道空间避免标题被遮挡,再针对上下半区设置文本朝向。

示例代码:

library(circlize)

# 模拟两个数据集的重叠关系矩阵
mat <- matrix(c(10, 5, 3, 8), nrow = 2, dimnames = list(c("Set1_A", "Set1_B"), c("Set2_X", "Set2_Y")))

# 绘制弦图并预留外侧标题空间
chordDiagram(mat, annotationTrack = c("grid", "name"), preAllocateTracks = list(
  track.height = 0.1,
  track.margin = c(0.02, 0)
))

# 添加数据集1标题(下半区)
circos.text(CELL_META$xcenter, CELL_META$ylim[2] + 0.1, 
            "数据集1", 
            facing = "downward",
            niceFacing = TRUE,
            cex = 1.2,
            sector.index = rownames(mat)[1],
            track.index = 2)

# 添加数据集2标题(上半区)
circos.text(CELL_META$xcenter, CELL_META$ylim[2] + 0.1, 
            "数据集2", 
            facing = "upward",
            niceFacing = TRUE,
            cex = 1.2,
            sector.index = colnames(mat)[1],
            track.index = 2)

circos.clear()

方式二:新增外侧环形轨道,分上下区放置标题

通过预分配额外的环形轨道,在指定扇区范围内添加标题,精准控制上下半区的标题位置。

示例代码:

library(circlize)

mat <- matrix(c(10, 5, 3, 8), nrow = 2, dimnames = list(c("Set1_A", "Set1_B"), c("Set2_X", "Set2_Y")))

# 预分配3层轨道:弦图轨道、扇区名称轨道、标题轨道
chordDiagram(mat, annotationTrack = c("grid"), preAllocateTracks = list(
  list(track.height = 0.08, track.margin = c(0.01, 0)),
  list(track.height = 0.1, track.margin = c(0.02, 0))
))

# 给中间轨道添加扇区名称
circos.track(track.index = 1, panel.fun = function(x, y) {
  circos.text(CELL_META$xcenter, CELL_META$ylim[2], CELL_META$sector.index, 
              facing = "clockwise", niceFacing = TRUE, cex = 0.8)
})

# 给下半区添加数据集1标题
circos.track(track.index = 2, panel.fun = function(x, y) {
  if(CELL_META$sector.numeric.index %in% 1:2) {
    circos.text(mean(CELL_META$xlim), CELL_META$ylim[2], "数据集1", 
                facing = "downward", niceFacing = TRUE, cex = 1.2)
  }
})

# 给上半区添加数据集2标题
circos.track(track.index = 2, panel.fun = function(x, y) {
  if(CELL_META$sector.numeric.index %in% 3:4) {
    circos.text(mean(CELL_META$xlim), CELL_META$ylim[2], "数据集2", 
                facing = "upward", niceFacing = TRUE, cex = 1.2)
  }
})

circos.clear()

关键调整点

  • 通过preAllocateTracks参数预留足够的外侧空间,避免标题与弦图主体重叠
  • facing参数控制文本朝向,niceFacing确保文本始终处于可读状态
  • 可通过修改track.height和位置偏移值(如CELL_META$ylim[2] + 0.1)微调标题的距离与大小

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 15:42:34