我想要使用相同的布局绘制大约24个网络(它们都共享相同的顶点)。我是R和igraph的新手,所以我想出了这个解决方案,可能不是很优雅。现在我卡住了。我想知道如何将对象名称(在这种情况下:V_turn1等)放入我的标题中,如果可能的话,还可以放入文件名中。
我添加了一些随机网络,以便更容易重现。它有点像这样:
print("begin")
library("igraph")
V_turn1 <- erdos.renyi.game(n=10,p.or.m=.2,type="gnp",directed=T)
V_turn2 <- erdos.renyi.game(n=10,p.or.m=.1,type="gnp",directed=T)
V_turn3 <- erdos.renyi.game(n=10,p.or.m=.3,type="gnp",directed=T)
V_turn4 <- erdos.renyi.game(n=10,p.or.m=.3,type="gnp",directed=T)
layout.old <- layout.random(V_turn1)
# I need the same layout for all renderings, because the nodes are all the same across my network data
list_of_graphs <- c("V_turn1", "V_turn2", "V_turn3", "V_turn4")
png(file="Networks_V3_%03d.png", width=1000,height=1000)
for(i in list_of_graphs){
plot(get(i), layout=layout.old)
title(deparse(list_of_graphs))
}
dev.off()
“deparse(list_of_graphs)”显然不起作用......
实际上,如果我可以为循环的每次迭代指定实际标题,即在新的字符向量或某些东西(如V_turn1的“This is Turn 1”)中,我会更高兴。我觉得必须有一个明显的解决方案,但到目前为止我没有尝试过任何工作。谢谢你的阅读。
答案 0 :(得分:0)
您可以使用main=
的{{1}}参数:
plot.igraph
当然,如果你有一个标题的特定模式,你可以使用list_of_graphes来创建list_of_titles。例如,在这里我从图形名称中删除前两个字母以创建图形标题:
list_of_graphs <- c("V_turn1", "V_turn2", "V_turn3", "V_turn4")
list_of_titles <- c("This is Turn 1","This is Turn 2","This is Turn 3","This is Turn 4")
lapply(seq_along(list_of_graphs),
function(i) plot(get(list_of_graphs[i]),
layout=layout.old,
main=list_of_titles[i]))
答案 1 :(得分:0)
您现在的解决方案几乎就在那里。目前,您的for循环正在迭代list_of_graphs
,因此每个i
都将成为该列表中的元素。
如果您对使用变量名称作为标题感到满意,可以使用i
作为标题:
plot(...)
title(i)
标题也可以简单地作为main
参数传递给plot
函数:
plot(..., main=i)
如果您不想将变量名称用作标题,则需要更多工作。 首先,您需要迭代索引,并使用它来查找图形和标题:
titles <- c("Title 1", "Title 2", "Title 3", "Title 4")
for (i in seq_along(list_of_graphs)) {
old.i <- list_of_graphs[i] # This is `i` in your current code
plot(get(old.i), layout=layout.old, main=titles[i])
}
然而@ agstudy的答案更优雅。