R is not taking the parameter hgap in layout_with_sugiyama

眉间皱痕 提交于 2019-12-02 12:34:57

问题


I'm working on R on a graph and I'd like to have a hierarchical plot, based on the values in the vector S (a value for each node).

lay2 <-  layout_with_sugiyama(grafo, attributes="all",  layers = S, hgap=10, vgap=10) 

plot(lay2$extd_graph, vertex.label.cex=0.5)

However, the paramaters hgap e vgap are not taken and the graph is really confused (even because I've got 162 nodes). I'm doing something wrong or there is another way in which I can do a hierarchical graph?


回答1:


I believe that layout_with_sugiyama is working just fine, but you may be misinterpreting the output. Since you do not provide any data, I will illustrate with some randomly generated data.

library(igraph)

set.seed(1234)
grafo = erdos.renyi.game(162, 0.03)
lay2 <-  layout_with_sugiyama(grafo, attributes="all",  
    hgap=10, vgap=10) 
plot(lay2$extd_graph, vertex.label.cex=0.5, vertex.size=9)

I think the source of your question is the fact that the nodes are a bit crowded together in the horizontal direction. But that should be expected. Let's analyze the layout, starting with the easy part, the vertical direction.

table(lay2$layout[,2])
 1 11 21 31 41 
24 82 42 13  1 

You can see that vgap worked. The spacing is 10 units apart. The second line up (y=11) has 82 nodes. Unless the nodes are tiny, 82 nodes on a single, horizontal line will overlap. But aren't they supposed to have spacing of at least 10? They do! Let's look at that second line.

sort(lay2$layout[lay2$layout[,2]==11,1])
 [1] -25 -15  -5   5  15  25  35  45  55  65  75  85  95 105 115 125 135 230
[19] 240 260 270 280 290 300 310 320 330 340 350 360 370 380 390 400 410 420
[37] 430 440 450 460 470 480 490 500 510 520 530 540 550 560 570 580 590 600
[55] 610 620 630 640 655 665 675 685 695 720 730 740 750 760 770 780 790 800
[73] 810 820 830 840 850 860 870 880 890 910

Looking at the whole graph, there is a slightly broader range.

range(lay2$layout[,1])
[1] -65 910

None of the numbers are less that 10 apart - as requested. hgap worked too! However, what happens when you try to plot that? If you read the part of the ?igraph.plotting help page that refers to the parameter rescale, you will see:

rescale:
Logical constant, whether to rescale the coordinates to the [-1,1]x-1,1 interval. Defaults to TRUE, the layout will be rescaled.

So the layout will be rescaled to a range of -1,1 and then plotted. Scaled or not, you need to fit 82 nodes in a single, horizontal row, so it is very difficult to avoid overlapping nodes.



来源:https://stackoverflow.com/questions/51194653/r-is-not-taking-the-parameter-hgap-in-layout-with-sugiyama

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!