R is not taking the parameter hgap in layout_with_sugiyama

后端 未结 1 1256
半阙折子戏
半阙折子戏 2021-01-22 18:19

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_sugi         


        
1条回答
  •  醉梦人生
    2021-01-22 18:42

    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.

    0 讨论(0)
提交回复
热议问题