大数跨境
0
0

R语言可视化|举例circlize绘制Multiple-group Chord diagram多组弦图

R语言可视化|举例circlize绘制Multiple-group Chord diagram多组弦图 数据分析的取经之路
2025-10-22
0
导读: R语言可视化|举例circlize绘制Multiple-group Chord diagram多
 

R语言可视化|举例circlize绘制Multiple-group Chord diagram多组弦图


从 circlize 包 0.4.10 开始,chordDiagram() 新增了 group 参数。你可以给每个节点(扇区)指定一个“组别”,函数会自动把同组的扇区排在一起,并在不同组之间留更大的间隙(也可用 big.gap 控制),从而更轻松地画出多组(分组)Chord 图。


📌参考网址:https://jokergoo.github.io/2020/06/08/multiple-group-chord-diagram/




1.1 加载数据及R包 

library(circlize)mat1 = matrix(rnorm(25), nrow = 5)rownames(mat1) = paste0("A", 1:5)colnames(mat1) = paste0("B", 1:5)mat2 = matrix(rnorm(25), nrow = 5)rownames(mat2) = paste0("A", 1:5)colnames(mat2) = paste0("C", 1:5)mat3 = matrix(rnorm(25), nrow = 5)rownames(mat3) = paste0("B", 1:5)colnames(mat3) = paste0("C", 1:5)mat = matrix(0, nrow = 10, ncol = 10)rownames(mat) = c(rownames(mat2), rownames(mat3))colnames(mat) = c(colnames(mat1), colnames(mat2))mat[rownames(mat1), colnames(mat1)] = mat1mat[rownames(mat2), colnames(mat2)] = mat2mat[rownames(mat3), colnames(mat3)] = mat3mat

创建分组
nm = unique(unlist(dimnames(mat)))group = structure(gsub("\\d", "", nm), names = nm)group

1.2 绘图 

grid.col = structure(c(rep(2, 5), rep(3, 5), rep(4, 5)),                     names = c(paste0("A", 1:5), paste0("B", 1:5),                                paste0("C", 1:5)))chordDiagram(mat, group = group, grid.col = grid.col)circos.clear()

换分类方式
group = structure(gsub("^\\w", "", nm), names = nm)groupchordDiagram(mat, group = group, grid.col = grid.col)circos.clear()
group = structure(gsub("\\d", "", nm), names = nm)group = factor(group[sample(length(group), length(group))], levels = c("C", "A", "B"))groupchordDiagram(mat, group = group, grid.col = grid.col)circos.clear()

🧩在 chordDiagram() 里使用 group 参数时,组的顺序会决定扇区(sector)的排列顺序。如果你把 group 变量设为因子(factor)类型,那么因子的水平(levels)顺序就会决定这些组在图中的排列顺序。

具体来说就是 你设定levels是CAB 那就是在画图时候,从C开始找顺序 所以是C3 C2 C5 C1 C4 A1 A4以此类推这样


间距大小
group = structure(gsub("\\d", "", nm), names = nm)chordDiagram(mat, group = group, grid.col = grid.col, big.gap = 20, small.gap = 5)circos.clear()

big.gap:控制不同组之间的空隙有多大。
👉 也就是组与组之间的“宽缝隙”。

small.gap:控制同一组内的扇区之间的空隙有多大。
👉 也就是组内扇区之间的“小缝隙”。

group = structure(gsub("\\d", "", nm), names = nm)chordDiagram(mat, group = group, grid.col = grid.col,             annotationTrack = c("grid", "axis"),             preAllocateTracks = list(               track.height = mm_h(4),               track.margin = c(mm_h(4), 0)             ))circos.track(track.index = 2, panel.fun = function(x, y) {  sector.index = get.cell.meta.data("sector.index")  xlim = get.cell.meta.data("xlim")  ylim = get.cell.meta.data("ylim")  circos.text(mean(xlim), mean(ylim), sector.index,              cex = 0.6, niceFacing = TRUE)}, bg.border = NA)highlight.sector(rownames(mat1), track.index = 1, col = "red",                  text = "A", cex = 0.8, text.col = "white", niceFacing = TRUE)highlight.sector(colnames(mat1), track.index = 1, col = "green",                  text = "B", cex = 0.8, text.col = "white", niceFacing = TRUE)highlight.sector(colnames(mat2), track.index = 1, col = "blue",                  text = "C", cex = 0.8, text.col = "white", niceFacing = TRUE)
  1. mat:流量/关联的矩阵(行列名对应扇区)。

    group = group:使用上面生成的分组信息

    grid.col = grid.col:给每个扇区指定颜色(名字需与扇区名匹配)。

    annotationTrack = c("grid","axis"):要求在外圈轨道显示扇区底盘(grid)刻度轴(axis)

    preAllocateTracks = ...先预留一条外层轨道(高度 4mm,外侧留 4mm 间距)。这样后面可以在这条轨道里放文字或做高亮。

    • mm_h():用毫米指定高度/边距,便于版面控制。


  • track.index = 2:指当前要操作第 2 条轨道(第 1 条是最外层,上一句预留的那条;画弦图时通常还会生成一条用于链接/轴等,索引可能因设置而不同,这里作者明确选择第 2 条)。

  • get.cell.meta.data("sector.index"):取到当前面板对应的扇区名

  • xlim/ylim:得到该扇区在当前轨道里的 x/y 范围,mean() 取中心点坐标。

  • circos.text(...):把扇区名写在该扇区这条轨道的中心位置;niceFacing=TRUE 让文字随圆弧方向自动调整朝向。

  • bg.border = NA:不要轨道边框线。


highlight.sector(sectors, ...):对给定的一组扇区在指定轨道上画一条彩色背景带,并可在该组上方写一个组标签文字

这里分别用三次调用,把三组扇区高亮为红/绿/蓝,并用 text="A"/"B"/"C" 作为该组的名字。

  • rownames(mat1)colnames(mat1)colnames(mat2):各自代表三组扇区的名称集合(要与你的扇区名一致)。作者用不同来源(行名/列名)只是方便从已有对象里取到想要的一组扇区。

track.index = 1:在最外层那条预留的轨道上做高亮(看起来更像“组带”)。

cex=0.8text.col="white":标签大小与颜色;niceFacing=TRUE 同样让文字顺着圆形朝向。


好啦,本期分享分享就到这结束啦,感谢大家关注支持,祝大家科研顺利~

【声明】内容源于网络
0
0
数据分析的取经之路
主要生物数据分析以及R语言可视化学习
内容 103
粉丝 0
数据分析的取经之路 主要生物数据分析以及R语言可视化学习
总阅读266
粉丝0
内容103