如何在ggplot2绘制Chord plot时实现弦带重叠效果
可以实现,核心是绕过常规弦图「节点宽度等于所有连接带宽总和」的默认约束,手动固定节点弧长,独立设置连接弦带宽度即可。
实现方案
1. R语言circlize包实现
- 放弃默认的
chordDiagram()自动节点宽度计算逻辑,手动固定每个节点的弧长对应你的固定数值(比如示例中的102) - 连接弦宽直接使用实际连接数值(38、21、45、30),关闭全局比例缩放和节点对称约束,弦带总宽度超过节点宽度时就会自然重叠
- 核心代码示例:
library(circlize) # 构造连接矩阵,值对应连接数值 mat = matrix(c(38,21,45,30), nrow = 1) rownames(mat) = "节点1" colnames(mat) = c("节点2","节点3","节点4","节点5") # 手动指定所有节点的固定数值,对应节点弧长 node_fixed_value = c("节点1"=102, "节点2"=102, "节点3"=102, "节点4"=102, "节点5"=102) chordDiagram(mat, grid.width = 0.1, # 节点弧的厚度 transparency = 0.5, # 半透明显出重叠效果 scale = FALSE, # 关闭全局自动缩放 symmetric = FALSE, # 关闭节点两侧对称约束 order = names(node_fixed_value), xlim = cbind(rep(0, length(node_fixed_value)), node_fixed_value)) # 手动固定每个节点的弧长范围
2. Python Holoviews/Plotly实现
- 不使用框架默认的节点大小自动计算逻辑,单独构造节点数据集,给每个节点指定固定的
start_angle和end_angle,对应你要的固定数值的弧长比例 - 连接弦带的宽度直接映射实际连接数值,设置
opacity参数小于1即可显示重叠效果 - 不需要绑定节点权重和边的权重总和,节点弧长不会随连接总数值变大
关键注意事项
- 一定要设置半透明参数,否则上层弦带会完全遮挡下层弦带,无法体现重叠层次
- 可以给不同连接设置差异化的弦带颜色,重叠区域的混色效果可以更清晰的区分多个叠加的弦带
内容的提问来源于stack exchange,提问作者Ariel Heminger
相关产品推荐
相关产品推荐

