Как я могу удлинить края на графике сети igraph (layout = fruchterman.reingold)? - PullRequest
22 голосов
/ 11 мая 2011

Попытка сделать сетевой график в R. Как мне удлинить ребра в сетевом графике с помощью IGraph?

Я действительно хочу использовать макет fruchterman-reingold.Есть ли какой-нибудь способ сделать этот алгоритм на основе силы более «пружинящим», чтобы мои вершины были дальше друг от друга?

спасибо.

Ответы [ 2 ]

16 голосов
/ 11 мая 2011

Вы можете управлять алгоритмом Фрухтермана-Рейнгольда, используя функцию layout.fruchterman.reingold. см .: help('layout.fruchterman.reingold'). Настройка, которую я часто использую и дает вам немного больше интервалов:

l <- layout.fruchterman.reingold(g,niter=500,area=vcount(g)^2.3,repulserad=vcount(g)^2.8)
plot(g,layout=l)

, где g - ваш графовый объект. Лучше всего просто протестировать различные значения этих параметров для вашего графика и посмотреть, что работает. Особенно repulserad влияет на интервал в графике. По умолчанию это квадрат числа узлов, поэтому более высокие значения должны давать вам более разнесенные графики.

7 голосов
/ 24 мая 2011

Если алгоритм layout.fruchterman.reingold все еще не дает желаемого результата путем настройки параметров, просто выполните следующее. Каждый макет возвращает набор координат с координатами x и y в первом и втором столбцах соответственно. Здесь вы можете применить любое преобразование, которое вам нравится, и если вы хотите просто масштабировать его, просто используйте

L = layout.fruchterman.reingold(G)*s; #Scaling factor s

Конечно, возможны и более причудливые преобразования. Просто для записи, вы также можете редактировать макет вручную с помощью мыши с помощью tkplot(G, layout=L). Вы можете получить координаты обратно через L = tkplot.getcoords(1).

...