1

我有大约两打网络要使用相同的布局进行绘制(它们都共享相同的顶点)。我是 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 的“这是第 1 轮”)。我觉得必须有一个明显的解决方案,但到目前为止我没有尝试过任何工作。感谢您的阅读。

4

2 回答 2

1

您可以使用以下main=参数plot.igraph

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]))

当然,如果你有一定的标题模式,你可以使用 list_of_graphes 来创建 list_of_titles。例如,这里我从图形名称中删除前 2 个字母以创建图形标题:

list_of_titles <- paste('This is',gsub('V_','',list_of_graphs))
于 2013-07-10T13:44:51.977 回答
1

您当前的解决方案几乎就在那里。目前,您的 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 的回答更优雅。

于 2013-07-10T14:00:31.470 回答