更改 R 中 iGraph 中顶点之间的间距
changing the spacing between vertices in iGraph in R
假设我想用以下数据作图:
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 下面的 children 比 8 和 9 下面的 children 多。
我敢打赌有更好的解决方案,但我找不到。这是我的方法。由于似乎缺少宽度的通用参数,您必须手动调整参数以获得所需的输出。
我的方法主要是调整绘图的某些元素的大小以使它们的大小合适,调整边距以尽可能优化space。这里最重要的参数是 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)
对于问题的第二部分,我不确定,但是查看函数内部我无法找出准确的答案,但我猜想同一级别的元素之间的 space 是在 [=他们有 31=] 个元素,比如 3、4、5 必须更接近,因为他们有 child 和 sub-child 然后他们需要更多 space.
假设我想用以下数据作图:
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 下面的 children 比 8 和 9 下面的 children 多。
我敢打赌有更好的解决方案,但我找不到。这是我的方法。由于似乎缺少宽度的通用参数,您必须手动调整参数以获得所需的输出。
我的方法主要是调整绘图的某些元素的大小以使它们的大小合适,调整边距以尽可能优化space。这里最重要的参数是 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)
对于问题的第二部分,我不确定,但是查看函数内部我无法找出准确的答案,但我猜想同一级别的元素之间的 space 是在 [=他们有 31=] 个元素,比如 3、4、5 必须更接近,因为他们有 child 和 sub-child 然后他们需要更多 space.