假设我想用以下数据制作一个图:
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以下的孩子多.
我敢打赌有更好的解决方案,但我找不到。这是我的方法。由于似乎缺少宽度的通用参数,因此您必须手动调整参数以获得所需的输出。
我的方法主要是调整绘图的某些元素的大小以使其大小合适,调整边距以尽可能优化空间。这里最重要的参数是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等),然后设置rescale到FALSE。使用 Rstudio 查看器,这会切断大量数据,但使用其他图形设备,它可能(不保证)运行良好。
无论如何,对于如何使用这些参数的每个疑问(有时非常棘手)类型 help(igraph.plotting)
对于问题的第二部分,我不确定,但查看函数内部,我无法找到准确的答案,但我想同一级别的元素之间的空间是根据它们拥有的子元素计算的,例如 3,4,5必须更近,因为他们有孩子和子孩子,然后他们需要更多空间。