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

如何用循环在R的igraph包中绘制带标注多面板网络图并导出PNG

R语言igraph多面板网络图绘制修复方案

核心错误原因

你当前仅输出1个网络的问题出在循环写法:for (i in length(listofsrs_nws)) 中length(listofsrs_nws)仅返回单个数值3,循环只会执行1次(仅遍历i=3的最后一个网络),修改为遍历全量索引即可解决。

完整可运行代码(含PNG导出、子图标注)

library(igraph)

# 示例网络和聚类结果准备
srs_1nw <- graph("Zachary")
srs_2nw <- graph("Heawood")
srs_3nw <- graph("Folkman")

srs_1c <- cluster_fast_greedy(srs_1nw)
srs_2c <- cluster_fast_greedy(srs_2nw)
srs_3c <- cluster_fast_greedy(srs_3nw) 

listofsrs_nws <- list(srs_1nw,srs_2nw,srs_3nw)
listofsrs_cs <- list(srs_1c,srs_2c,srs_3c)
colours <- c("red","blue","green","yellow")

# 开启PNG导出设备,可自行调整宽高、分辨率、保存路径
png("多面板网络图.png", width = 1200, height = 800, res = 150)
# 设置2行3列布局,调整边距避免内容拥挤
par(mfrow=c(2,3), mar = c(2,1,1,1)) 

# 修正循环写法,遍历所有网络
for (i in seq_along(listofsrs_nws)) {
  c <- listofsrs_cs[[i]]
  nw <- listofsrs_nws[[i]]
  
  # 保留你要求的V/E格式修改网络属性,加1避免孤立节点log(0)报错
  V(nw)$size <- log(strength(nw) + 1)*6  
  E(nw)$arrow.size <- 2                   # 有向图生效,无向图不影响运行
  
  c.colours <- colours[membership(c)]
  
  plot(c, nw, col = c.colours,
       mark.col = adjustcolor(colours, alpha.f = 0.4),
       mark.border = adjustcolor(colours, alpha.f = 1),
       vertex.frame.width = 5, edge.curved = .15)
  # 子图角落标注A-F,加粗字号可自行调整
  mtext(LETTERS[i], side = 3, adj = 0.05, font = 2, cex = 1.3, col = "black")
}

# 关闭绘图设备,完成PNG导出
dev.off()

代码说明

  • 循环改用seq_along(listofsrs_nws)自动适配列表内的网络数量,后续新增3个网络到两个列表中,即可自动填满2行3列的6个位置,标注也会自动顺延到F
  • 保留了你要求的V(nw)$xxx/E(nw)$xxx格式的属性修改逻辑,不影响原有出图效果
  • mtext函数实现子图编号标注,side=3表示放在顶部,adj=0.05表示靠左对齐,可根据需求调整位置和样式
  • 你可以按需修改png()函数的参数调整导出图片的尺寸、分辨率和保存路径

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:09:03