循环创建自我网络中每个节点的 PDF,节点 ID 作为 R 中的文件名

Loop to create PDFs of each node in ego network with node ID as file names in R

我正在使用 R 从 iGraph 中的图形创建自我网络,根据对此 友情提供的答案。然后我想将每个自我网络导出为 PDF 或图像文件(最好是 PDF)中的图。

由于完整数据框中有 788 'ego networks',我想让 PDF 的文件名与网络的相关节点 ID 相匹配,即数据框的 'From' 列。否则很难找到我想要的特定网络。如何做到这一点?

这是网络示例

library(igraph)


 > dput(droplevels(head(df)))
structure(list(From = structure(c(5L, 1L, 6L, 4L, 2L, 3L), .Label = c("ADVANCED DIPLOMA OF ACCOUNTING", 
"ADVANCED DIPLOMA OF CONVEYANCING", "ADVANCED DIPLOMA OF LEADERSHIP AND MANAGEMENT", 
"ADVANCED DIPLOMA OF NETWORK SECURITY", "ADVANCED DIPLOMA OF POLICING", 
"ADVANCED DIPLOMA OF VISUAL ARTS"), class = "factor"), To = structure(c(5L, 
1L, 6L, 3L, 2L, 4L), .Label = c("DIPLOMA OF ACCOUNTING", "DIPLOMA OF EVENT MANAGEMENT", 
"DIPLOMA OF INFORMATION TECHNOLOGY NETWORKING", "DIPLOMA OF LEADERSHIP AND MANAGEMENT", 
"DIPLOMA OF POLICING", "DIPLOMA OF VISUAL ARTS"), class = "factor")), row.names = c(NA, 
6L), class = "data.frame")

然后我把它做成一个图,然后是一个自我图

g <- graph_from_data_frame(df, directed = TRUE, vertices = NULL)
z <- make_ego_graph(g)

并使用这个循环导出每个网络

jpeg(filename="EgoGraph%03d.jpeg")
for (i in 1:length(z)) { plot(z[[i]]) }
dev.off()

好吧,有些自我网络是 "from",有些是“to”。我认为您希望名称是用于生成网络的任何节点。 自我网络与顶点的顺序相同,因此您可以只使用顶点名称作为文件名的基础。对于您的示例,这有效。

setwd("Ego_pdf")       # set this to someplace reasonable
for(i in 1:length(z)) {
    pdf(paste0(V(g)[i]$name, ".pdf"))
    plot(z[[i]])
    dev.off()
}

这只是遍历顶点索引,将输出名称设置为顶点名称,绘制自我网络并关闭 pdf,以便您为下一个做好准备。