在R中改变iGraph中顶点之间的间距

Ale*_*lex 10 plot r igraph

假设我想用以下数据制作一个图:

pairs <- c(1, 2, 2, 3, 2, 4, 2, 5, 2, 6, 2, 7, 2, 8, 2, 9, 2, 10, 2, 11, 4, 
           14, 4, 15, 6, 13, 6, 19, 6, 28, 6, 36, 7, 16, 7, 23, 7, 26, 7, 33,
           7, 39, 7, 43, 8, 35, 8, 40, 9, 21, 9, 22, 9, 25, 9, 27, 9, 33, 9,
           38, 10, 12, 10, 18, 10, 20, 10, 32, 10, 34, 10, 37, 10, 44, 10, 45,
           10, 46, 11, 17, 11, 24, 11, 29, 11, 30, 11, 31, 11, 33, 11, 41, 11, 
           42, 11, 47, 14, 50, 14, 52, 14, 54, 14, 55, 14, 56, 14, 57, 14, 58,
           14, 59, 14, 60, 14, 61, 15, 48, 15, 49, 15, 51, 15, 53, 15, 62, 15, 
           63)

g <- graph( pairs )
plot( g,layout = layout.reingold.tilford )
Run Code Online (Sandbox Code Playgroud)

我得到一个类似下面的情节:

在此输入图像描述

如您所见,某些顶点之间的空间非常小,以至于这些顶点重叠.

我想知道是否有办法改变顶点之间的间距.

另外,顶点之间的间距是否任意?例如,顶点3,4和5彼此非常接近,但是5和6相距很远.

编辑:

对于我的第二个问题,我猜间距取决于下面的节点数.例如,10和11比8和9更远是因为10和11以下的孩子比8和9以下的孩子多.

Sab*_*DeM 6

我敢打赌有更好的解决方案,但我找不到。这是我的方法。由于似乎缺少宽度的通用参数,因此您必须手动调整参数以获得所需的输出。

我的方法主要是调整绘图的某些元素的大小以使其大小合适,调整边距以尽可能优化空间。这里最重要的参数是asp控制图的纵横比的参数(因为在这种情况下,我认为图长比高好,纵横比小于 0.5 是正确的)。其他技巧是减少顶点和字体的大小。这是代码:

plot( g, layout = layout.reingold.tilford,
      edge.width = 1,
      edge.arrow.width = 0.3,
      vertex.size = 5,
      edge.arrow.size = 0.5,
      vertex.size2 = 3,
      vertex.label.cex = 1,
      asp = 0.35,
      margin = -0.1)
Run Code Online (Sandbox Code Playgroud)

这产生了这个情节: 在此处输入图片说明

另一种方法是设置图形设备到PDF(或JPEG等),然后设置rescaleFALSE。使用 Rstudio 查看器,这会切断大量数据,但使用其他图形设备,它可能(不保证)运行良好。

无论如何,对于如何使用这些参数的每个疑问(有时非常棘手)类型 help(igraph.plotting)

对于问题的第二部分,我不确定,但查看函数内部,我无法找到准确的答案,但我想同一级别的元素之间的空间是根据它们拥有的子元素计算的,例如 3,4,5必须更近,因为他们有孩子和子孩子,然后他们需要更多空间。