Нанесите объект igraph на торе
У меня есть решетка, которая обернута на торе (каждый узел в конце графа связан с их противоположностью на сетке).
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!
У меня проблемы с созданием / поиском, это макет, который будет отображать график на торе, в идеале мне бы также хотелось иметь 3d-макет для rglplot.
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, левый график для примера чего-то похожего на то, что я ищу (также это действительно хорошая статья!!)
1 ответ
Играя с этим конкретным примером, компоновка Fruchterman-Reingold в 3-х измерениях позволила получить лучший график в экспериментах.
coordsFR <- layout.fruchterman.reingold(g, dim=3)
rglplot(g,vertex.size = 4,vertex.label = NA,vertex.color = "red",
layout = coordsFR)
Я тоже пробовал layout.sphere
, layout.circle
(который не производит третьего измерения) и layout.drl
с 3 размерами. layout.drl
с 3-мя измерениями выглядит лучше, чем сфера, но силовая компоновка, которую я показываю выше, приятнее.