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

如何实现任意两事件间仅单一路径的Chord Diagram?附R代码

实现两事件间仅单路径的弦图(Chord Diagram)

我希望制作一个任意两个事件之间仅存在一条路径的Chord Diagram,以下是我的R代码:

library(stringr)
library(circlize)

Subject <- 1:137
set.seed(123)

# Create 'EventA' variable with binomial distribution
EventA <- rbinom(137, size = 1, prob = 0.68)
EventB <- rbinom(137, size = 1, prob = 0.62)
EventC <- rbinom(137, size = 1, prob = 0.81)
EventD <- rbinom(137, size = 1, prob = 0.55)
EventE <- rbinom(137, size = 1, prob = 0.71)
EventF <- rbinom(137, size = 1, prob = 0.77)
data <- data.frame(Subject, EventA, EventB, EventC, EventD, EventE, EventF)

data$Subject <- str_sub(data$Subject, -5, -1)
#############################################
events <- as.matrix(data[, -1])

num_sectors <- ncol(events)

co_occurrence <- t(events) %*% events

diag(co_occurrence) <- 0

event_names <- c("EventA", "EventB", "EventC", "EventD", "EventE", "EventF")

event_numerosity <- colSums(data[,c(-1,-8)])

event_labels <- paste(event_names, "N = ", event_numerosity)

colnames(co_occurrence) <- rownames(co_occurrence) <- event_labels

print(co_occurrence)

grid.col <- setNames(rainbow(length(unlist(dimnames(co_occurrence)))), union(rownames(co_occurrence), colnames(co_occurrence)))

chordDiagram(co_occurrence, grid.col = grid.col) 

当前代码生成的弦图中,任意两个事件间存在双向路径,要实现仅单条路径的效果,可按以下方式修改:


解决思路

核心是处理共现矩阵,仅保留上三角或下三角区域的连接值,将另一区域设为0,这样chordDiagram只会绘制单方向的弦,实现两事件间仅一条路径的效果。

修改后的完整代码

library(stringr)
library(circlize)

Subject <- 1:137
set.seed(123)

# 创建事件变量
EventA <- rbinom(137, size = 1, prob = 0.68)
EventB <- rbinom(137, size = 1, prob = 0.62)
EventC <- rbinom(137, size = 1, prob = 0.81)
EventD <- rbinom(137, size = 1, prob = 0.55)
EventE <- rbinom(137, size = 1, prob = 0.71)
EventF <- rbinom(137, size = 1, prob = 0.77)
data <- data.frame(Subject, EventA, EventB, EventC, EventD, EventE, EventF)

data$Subject <- str_sub(data$Subject, -5, -1)

# 转换为事件矩阵
events <- as.matrix(data[, -1])

# 计算共现矩阵
co_occurrence <- t(events) %*% events
diag(co_occurrence) <- 0  # 移除自身连接

# 关键:保留上三角矩阵,下三角设为0(仅保留单方向连接)
co_occurrence[lower.tri(co_occurrence)] <- 0

# 设置标签
event_names <- c("EventA", "EventB", "EventC", "EventD", "EventE", "EventF")
event_numerosity <- colSums(data[, -1])
event_labels <- paste(event_names, "N = ", event_numerosity)
colnames(co_occurrence) <- rownames(co_occurrence) <- event_labels

# 设置颜色
grid.col <- setNames(rainbow(length(event_labels)), event_labels)

# 绘制弦图
chordDiagram(co_occurrence, grid.col = grid.col)

关键说明

  • co_occurrence[lower.tri(co_occurrence)] <- 0:将共现矩阵的下三角区域全部设为0,只保留上三角的连接值,这样任意两个事件之间只会有一条按扇区顺序的单方向弦。如果需要保留下三角路径,替换为co_occurrence[upper.tri(co_occurrence)] <- 0即可。
  • 修改后,弦图中任意一对事件之间只会显示一条连接路径,完全符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 00:43:26