如何为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
相关产品推荐
相关产品推荐

