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

弦图不完整轴线补全及circlize参数控制技术问询

circlize弦图轴线完整性问题解决方法

让链接对接对象的轴线保持完整

有两种实用方法可以实现:

  1. 分层绘制轴线与链接
    先单独绘制完整的环形轴线(每个类别的条带),再绘制弦链接,确保轴线不会被覆盖或截断。示例代码:

    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()
    

    这种分层绘制方式让完整轴线作为底层,链接覆盖在上方,轴线的完整轮廓(含边框)始终可见。

  2. 调整链接显示参数
    通过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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 07:23:00