R не принимает параметр hgap в layout_with_sugiyama - PullRequest
0 голосов
/ 05 июля 2018

Я работаю над R на графике, и мне бы хотелось иметь иерархический график, основанный на значениях в векторе S (значение для каждого узла).

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

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

Однако параметры hgap e vgap не взяты, и график действительно запутан (даже потому, что у меня 162 узла). Я делаю что-то не так или есть другой способ, которым я могу сделать иерархический график?

1 Ответ

0 голосов
/ 05 июля 2018

Я считаю, что layout_with_sugiyama работает просто отлично, но вы можете неправильно интерпретировать вывод. Так как вы делаете не предоставлю никаких данных, я проиллюстрирую некоторые случайно сгенерированные данные.

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)

Sugiyama

Я думаю, что источником вашего вопроса является тот факт, что узлы немного тесноваты в горизонтальном направлении. Но этого следовало ожидать. Давайте разберем макет, начиная с легкой частью, вертикальное направление.

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

Вы можете видеть, что vgap работал. Расстояние составляет 10 единиц друг от друга. Вторая строка вверх (у = 11) имеет 82 узла. Если узлы не крошечные, 82 узла на одной горизонтальной линии будут перекрываться. Но разве они не должны иметь интервал не менее 10? Они делают! Давайте посмотрим на эту вторую строку.

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

Глядя на весь график, диапазон немного шире.

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

Ни одно из чисел не меньше 10 с точностью до запятой. hgap тоже сработал! Однако что происходит, когда вы пытаетесь построить это? Если вы прочитали часть ?igraph.plotting страница справки, которая ссылается на параметр rescale, вы увидите:

Rescale:
Логическая константа, масштабировать ли координаты с интервалом [-1,1] x-1,1. По умолчанию TRUE, макет будет изменен.

Таким образом, макет будет изменен до диапазона -1,1, а затем нанесен на график. Масштабируется или нет, вам нужно разместить 82 узла в одном горизонтальном ряду, поэтому очень трудно избежать перекрывающихся узлов.

...