1

トーラスにラップされたラティスがあります (グラフの端にある各ノードは、グリッド上の反対側にリンクされています)。

require("igraph")
require("rgl")

n = 10
g = graph.lattice(c(n,n)) # create a square lattice (nxn)

plot(g,vertex.size = 0.5,vertex.size = 4,vertex.label = NA,vertex.color = "red")

# want to connect up the corners (horribly done)
v1 = seq(from =1, to = n,by = 1)
v2 = seq(from = n, to = n^2, by = n)
v3 = seq(from = n^2, to = n^2 - n+1, by = -1)
v4 = seq(from = v3[length(v3)],to = 1,by = -n)

a = cbind(rbind(v1,v2), rbind(v3,v4))
a2 = matrix(a,nrow=length(a),ncol = 1)

g = add.edges(g,a2)
plot(g,vertex.size = 4,vertex.label = NA,vertex.color = "red")

sum(degree(g2) != 4) # so all nodes do indeed have degree four, delighted!

作成/検索に問題があるのは、グラフをトーラスにプロットするレイアウトです。理想的には、rglplot の 3D レイアウトも必要です。

l2d = layout.a.lovely.torus(g,dim = 2)
l3d = layout.a.lovely.torus(g,dim = 3)

plot(g,vertex.size = 4,vertex.label = NA,vertex.color = "red",layout = l2d)
rglplot(g,vertex.size = 4,vertex.label = NA,vertex.color = "red",layout = l3d)

私が探しているものに似たものの例については、図1の左側のグラフを参照してください(これも本当に素晴らしい紙です!!)

http://ndg.asc.upenn.edu/files/Centola-2010-Science.pdf

4

1 に答える 1

5

この特定の例をいじってみると、3 次元の Fruchterman-Reingold レイアウトが少しの実験で最も優れたグラフを生成しました。

coordsFR <- layout.fruchterman.reingold(g, dim=3)
rglplot(g,vertex.size = 4,vertex.label = NA,vertex.color = "red",
        layout = coordsFR)

ここに画像の説明を入力

layout.spherelayout.circle(これは 3 次元を生成しません)と 3 次元も試しlayout.drlました。layout.drl3 次元のレイアウトは球体よりも見栄えがしますが、上に示したフォース ベースのレイアウトの方が優れています。

于 2014-04-25T12:49:10.397 に答える