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

R语言circlize包:如何在弦图各扇区内按年份分组

解决circlize弦图按年份分组扇区的问题

要实现按年份分组扇区,核心是将组织(Org)与年份(Year)组合成新的扇区标识,并给这些新扇区指定对应的年份分组。以下是具体步骤:

1. 生成带年份的扇区名称

将每个组织和对应的年份拼接成新的扇区ID,这样每个扇区代表「某年份的某组织」:

# 生成带年份的扇区列
stack.df$Org_1_Year <- paste(stack.df$Org_1, stack.df$Year, sep = "_")
stack.df$Org_2_Year <- paste(stack.df$Org_2, stack.df$Year, sep = "_")

2. 准备分组向量

创建命名向量,其中名称是带年份的扇区ID,值是对应的年份,确保同一年份的扇区被归为一组:

# 获取所有带年份的扇区
all_sectors <- union(stack.df$Org_1_Year, stack.df$Org_2_Year)
# 提取每个扇区对应的年份作为分组
group_vec <- sapply(all_sectors, function(x) strsplit(x, "_")[[1]][2])
# 设置命名(扇区ID为名称,年份为分组值)
names(group_vec) <- all_sectors

3. 准备带年份扇区的颜色映射

沿用原组织的颜色,给每个带年份的扇区分配对应颜色:

year_sector_cols <- sapply(all_sectors, function(x) {
  org <- strsplit(x, "_")[[1]][1]
  Type_Cols[org]
})

4. 绘制带年份分组的弦图

使用新的扇区列,指定group参数完成分组,并可调整分组的显示样式:

library(circlize)

chordDiagramFromDataFrame(stack.df[, c("Org_1_Year", "Org_2_Year")],
                          group = group_vec,  # 关键:指定分组向量
                          grid.col = year_sector_cols,
                          link.lty = stack.df$lty,
                          directional = 1,
                          direction.type = "arrows",
                          link.arr.col = c("black", rep("white", nrow(stack.df) - 1)),
                          group.height = 0.05,  # 分组之间的间隔高度
                          group.col = unique(stack.df$Link_cols)  # 分组标签的颜色
                          )

# 自定义分组标签显示(可选,优化标签方向)
circos.track(track.index = 1, panel.fun = function(x, y) {
  if(abs(CELL_META$xcenter) < 1e-6) {
    circos.text(CELL_META$xcenter, CELL_META$ylim[1], CELL_META$group, 
                facing = "clockwise", niceFacing = TRUE, adj = c(0, 0.5))
  }
}, bg.border = NA)

为什么之前的尝试失败?

你之前的group向量格式错误:circlize要求group是命名向量,名称为扇区ID,值为该扇区所属的组。同时,原始的扇区是不带年份的组织(如OOP),每个组织跨多个年份,无法直接给单个组织指定唯一分组,必须将组织与年份组合成新扇区,才能按年份实现分组。


内容的提问来源于stack exchange,提问作者Purrsia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 01:28:19