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

在R中如何为igraph加权关联矩阵添加数值权重以绘制加权网络图

R语言igraph构建带评分权重的导演-编剧合作网络实现方案

你当前用table只能生成统计合作次数的关联矩阵,要是需要关联矩阵的值为评分聚合结果,可参考以下两种实现方式:


方法1:通过加权关联矩阵构建(适配graph_from_incidence_matrix用法)

使用xtabs函数可以直接生成按指定指标聚合的加权关联矩阵,代码如下:

# 加载igraph包
library(igraph)

# 原始数据
episodes <- data.frame(
  director = c("name1","name1","name1", "name1", "name2","name3", "name3"), 
  writer = c("name4", "name5", "name4", "name6", "name6", "name7", "name4"), 
  rating = c(7.5,8.5,7,9,9,6,9)
)

# 生成加权关联矩阵,FUN参数指定评分的聚合规则:sum是求和,mean是取均值,max是取最高评分
incidence_mat <- xtabs(rating ~ director + writer, data = episodes, FUN = sum)

# 构建二部加权网络
g <- graph_from_incidence_matrix(incidence_mat, weighted = TRUE, directed = FALSE)

# 验证边权重是否正确
E(g)$weight

该方法生成的是二部网络,节点自动带有type属性:TRUE对应行(导演),FALSE对应列(编剧),方便后续区分节点样式。


方法2:直接通过边列表构建(更灵活无需转换矩阵)

如果不需要关联矩阵作为中间结果,可以直接把原始数据转换为边列表构建网络,代码更简洁:

library(igraph)

# 直接从数据框的导演、编剧列构建无向网络
g <- graph_from_data_frame(episodes[,c("director","writer")], directed = FALSE)
# 给边添加评分权重属性
E(g)$weight <- episodes$rating

# 若同一个导演和编剧有多部合作作品,可合并边并聚合评分,下面的sum可替换为mean/max
g <- simplify(g, edge.attr.comb = list(weight = "sum"))

权重可视化示例

绘图时可直接将权重映射为边的粗细、标签:

# 给节点设置分类颜色:导演橙色,编剧浅蓝色(方法2可自行根据节点所属类别调整判断规则)
V(g)$color <- ifelse(V(g)$type, "orange", "lightblue")

plot(g,
     edge.width = E(g)$weight, # 边的粗细对应评分高低
     edge.label = E(g)$weight, # 边显示具体评分值
     vertex.label.cex = 0.8)

注意事项

  • 同一导演和编剧有多部合作作品时,可根据需求调整评分的聚合规则,替换代码中的sum为mean/max即可
  • 不需要展示权重数值可以删除edge.label参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:06:04