2016-04-25 17 views
3

Rのように階層型ネットワークを作成する方法はありますか?あなたは一般的なネットワークを得るまでように、それは他の4つのハブに取り付けられた5つのノードのハブを生成する前に、ある、と階層型ネットワークの作成

enter image description here

enter image description here

私はmake_tree IGRAPH機能を使用することができると思うが、私は繰り返しハブを追加する方法を知りません。 これは私がやったことです。

net <- make_tree(n = 5, children = 4, mode = "undirected") 
plot(net) 

enter image description here

これがどのようにエレガント

答えて

2

わからない、ありがとうございました。あなたのようにプロットを得るためにはもっと多くの作業が必要ですが、のグラフが正しいと思います。

library(igraph) 

#' This adds the gadd graph to the main graph, g, and wires all of its vertices 
#' to the central vertex of g 
attach_to_center <- function(g, gadd) { 
    g <- g + gadd + edges(as.vector(rbind(1, gorder(g) + 1:gorder(gadd)))) 
} 

nIter <- 2 
nChild <- 4 

# The initial graph 
g <- make_empty_graph(5, directed = FALSE) + edges(1,2,1,3,1,4,1,5,2,3,3,4,4,5,5,2) 

for (j in 1:nIter) { 
    g0 <- g 
    for (i in 1:nChild) { 
    g <- attach_to_center(g, g0) 
    } 
} 

plot(g, vertex.label = NA) 

(プロットは3回または4回以上反復されていますが)十分に速いようです。

1

私は同様の要件を持っていました。次のコードは、グラフを生成します。中央部分グラフの回転を除いてのみです。グラフが生成

n = 5 
periphery = c(2,3,4,5) 

#Make the seed graph. 
g <- make_empty_graph(n, directed = FALSE) + edges(1,2,1,3,1,4,1,5,2,3,2,4,2,5,3,4,3,5,4,5) 
g_main <- make_empty_graph(directed = FALSE) 

#Create the layout for the initial 5 nodes. 
xloc <- c(0,.5,.5,-.5,-.5) 
yloc <- c(0,-.5,.5,.5,-.5) 
#Shift for each iteration. 
xshift <- 3*xloc 
yshift <- 3*yloc 

xLocMain <- c() 
yLocMain <- c() 
allperifery <- c() 

for (l in 1:n) { 
    g_main <- g_main + g 
    xLocMain <- c(xLocMain, xloc + xshift[l]) 
    yLocMain <- c(yLocMain, yloc + yshift[l]) 
    if (l != 1) { 
    #Calculate periphery nodes. 
    allperifery <- c(allperifery, (l-1)*n + periphery) 
    } 
} 
#Connect each periphery node to the central node. 
for (y in allperifery) { 
    g_main <- g_main + edges(1, y) 
} 

## Repeat the same procedure for the second level. 
xLocMM <- c() 
yLocMM <- c() 

xshiftNew <- 10*xloc 
yshiftNew <- 10*yloc 

g_mm <- make_empty_graph(directed = FALSE) 
allpp <- c() 
for (l in 1:n) { 
    g_mm <- g_mm + g_main 
    xLocMM <- c(xLocMM, xLocMain + xshiftNew[l]) 
    yLocMM <- c(yLocMM, yLocMain + yshiftNew[l]) 
    if (l != 1) { 
    allpp <- c(allpp, (l-1)*(n*n) + allperifery) 
    } 
} 

for (y in allpp) { 
    g_mm <- g_mm + edges(1, y) 
} 

l <- matrix(c(rbind(xLocMM, yLocMM)), ncol=2, byrow=TRUE) 
plot(g_mm, vertex.size=2, vertex.label=NA, layout = l) 

は、各ノードの enter image description here

位置は上述とplot関数に渡さなければなりません。