弦图不完整轴线补全及circlize参数控制技术问询
circlize弦图轴线完整性问题解决方法
让链接对接对象的轴线保持完整
有两种实用方法可以实现:
分层绘制轴线与链接
先单独绘制完整的环形轴线(每个类别的条带),再绘制弦链接,确保轴线不会被覆盖或截断。示例代码:library(circlize) # 构造迁移矩阵数据 mig_mat = matrix(c(20, 15, 8, 5, 12, 25, 10, 7, 9, 11, 30, 6, 4, 6, 5, 18), nrow = 4, dimnames = list(c("东南亚", "欧洲", "西亚", "其他"), c("东南亚", "欧洲", "西亚", "其他"))) # 设置环形参数 circos.par(gap.degree = 12, start.degree = 90) # 第一步:绘制完整的轴线(仅保留网格层) chordDiagram(mig_mat, annotationTrack = "grid", grid.col = c("#FF9999", "#66CCFF", "#99FF99", "#FFCC66"), grid.border = "black", annotationTrackHeight = c(0.05, 0)) # 第二步:仅绘制弦链接,不重复绘制轴线 chordDiagram(mig_mat, annotationTrack = NULL, link.col = rgb(0.3, 0.3, 0.3, 0.4), transparency = 0.6) # 清理环形绘图环境 circos.clear()这种分层绘制方式让完整轴线作为底层,链接覆盖在上方,轴线的完整轮廓(含边框)始终可见。
调整链接显示参数
通过chordDiagram()的参数优化显示效果,强化轴线完整性:- 设置
grid.border = "black":给轴线添加边框,即使被链接覆盖,边框也能标识轴线的完整范围; - 调整
link.transparency:降低链接不透明度,让下方的完整轴线清晰可见; - 设置
link.largest.ontop = FALSE:避免大链接完全遮挡轴线。
- 设置
在链接对接前截断轴线
如果需要让轴线在链接起点处截断,而非延伸至总数值最大值,可通过手动控制轴线长度和链接位置实现:
library(circlize) mig_mat = matrix(c(20, 15, 8, 5, 12, 25, 10, 7, 9, 11, 30, 6, 4, 6, 5, 18), nrow = 4, dimnames = list(c("东南亚", "欧洲", "西亚", "其他"), c("东南亚", "欧洲", "西亚", "其他"))) # 计算每个类别的总数值(输入+输出) total_vals = rowSums(mig_mat) + colSums(mig_mat) - diag(mig_mat) # 构造截断后的轴线长度(此处以总数值减去输出值为例,可按需调整截断逻辑) truncated_vals = total_vals - rowSums(mig_mat) # 初始化环形绘图 circos.par(gap.degree = 12) circos.initialize(factors = names(truncated_vals), x = truncated_vals) # 绘制截断后的轴线 circos.trackPlotRegion(factors = names(truncated_vals), ylim = c(0, 1), bg.col = c("#FF9999", "#66CCFF", "#99FF99", "#FFCC66"), bg.border = "black") # 手动绘制弦链接(示例:东南亚到欧洲) circos.link("东南亚", truncated_vals["东南亚"], "欧洲", truncated_vals["欧洲"], col = rgb(0.3, 0.3, 0.3, 0.4)) # 其余链接可按此逻辑逐一添加 circos.clear()
这种方式完全自定义轴线长度和链接起始位置,精准实现截断效果。
内容的提问来源于stack exchange,提问作者gnuser23
相关产品推荐
相关产品推荐

