如何在igraph网络图中延长边缘(布局=fruchterman.reingold)?

24

尝试在R中绘制网络图。如何使用IGraph延长网络图中的边缘长度?

我想要使用fruchterman-reingold布局。有没有办法使该基于力的算法更具“弹性”,以便我的顶点之间距离更远?

谢谢。


有任何解决办法吗? - Shlomi Schwartz
2个回答

16

您可以使用layout.fruchterman.reingold函数来控制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会影响图形中节点之间的间距。默认值为节点数量的平方,因此更高的值应该可以让你得到更多间距较大的图形。


12
“Argument `repulserad'已被弃用并且在v.1.0.1中没有任何效果。” - WAF
有解决废弃问题的任何解决方案吗? - Christopher John

7
如果通过调整参数,layout.fruchterman.reingold算法仍然不能给你想要的结果,那么请按照以下步骤操作。每个布局都会返回一组坐标,其中第一列和第二列分别是x坐标和y坐标。您可以在此处应用任何转换,如果只想进行缩放,则只需使用。
L = layout.fruchterman.reingold(G)*s; #Scaling factor s

当然,还有更多花式的转换方式。仅供记录,您也可以使用tkplot(G, layout=L)手动使用鼠标编辑布局。您可以通过L = tkplot.getcoords(1)获取坐标。


2
按照常数进行缩放没有效果,除非您在 igraph::plot 函数中提供 rescale=FALSE 参数。 - deeenes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接