Как я могу удлинить края на графике сети igraph (layout=fruchterman.reingold)?
Попытка сделать сетевой график в R. Как я могу удлинить ребра в сетевом графике, используя IGraph?
Я на самом деле хочу использовать макет Фруктермана-Рейнгольда. Есть ли какой-нибудь способ, которым я могу сделать этот алгоритм, основанный на силе, "более пружинящим", чтобы мои вершины были дальше друг от друга?
Благодарю.
2 ответа
Вы можете управлять алгоритмом Фрухтермана-Рейнгольда, используя 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
влияет на расстояние в графике. По умолчанию это квадрат числа узлов, поэтому более высокие значения должны давать вам более разнесенные графики.
Если layout.fruchterman.reingold
Алгоритм по-прежнему не дает того, что вы хотите, путем настройки параметров, просто сделайте следующее. Каждый макет возвращает набор координат с координатами x и y в первом и втором столбцах соответственно. Здесь вы можете применить любое преобразование, которое вам нравится, и если вы хотите просто масштабировать его, просто используйте
L = layout.fruchterman.reingold(G)*s; #Scaling factor s
Конечно, возможны и более причудливые преобразования. Просто для записи, вы также можете редактировать макет вручную с помощью мыши, используя tkplot(G, layout=L)
, Вы можете получить координаты обратно через L = tkplot.getcoords(1)
,