【问题标题】:changing the spacing between vertices in iGraph in R在 R 中更改 iGraph 中顶点之间的间距
【发布时间】:2015-08-14 14:07:35
【问题描述】:

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

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 )

我得到如下图:

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

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

2。另外,顶点之间的间距是任意的吗?比如顶点3、4、5离得很近,而5和6相距很远。

编辑:

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

【问题讨论】:

  • 使图更大,顶点更小。

标签: r plot igraph


【解决方案1】:

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

我的方法主要是调整绘图的某些元素的大小以使其大小合适,调整边距以尽可能优化空间。这里最重要的参数是控制绘图纵横比的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)

这产生了这个情节:

另一种方法是将图形设备设置为 PDF(或 JPEG 等),然后将 rescale 设置为 FALSE。使用 Rstudio 查看器会截断大量数据,但使用其他图形设备可能(不保证)可以正常工作。

无论如何,对于如何使用这些参数(有时非常棘手)有任何疑问,请输入help(igraph.plotting)

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

【讨论】: