1

同じレイアウトを使用してプロットしたい約 20 個のネットワークがあります (それらはすべて同じ頂点を共有しています)。私は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」など) で指定できます。明らかな解決策があるに違いないと感じていますが、これまで試したことはありません。読んでくれてありがとう。

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 に答える