Вот два способа получить лучший макет.Оба решения требуют лишь небольшого количества экспериментов, чтобы найти хорошие настройки.Во-первых, поскольку вы не предоставляете никаких данных, я приведу пример, который немного похож на ваш.
library(igraph)
set.seed(1234)
g1 = erdos.renyi.game(100,0.35)
g2= erdos.renyi.game(10,0.35)
G = add_vertices(g1+g2, 50)
LO = layout_with_fr(G)
plot(G, layout=LO, vertex.size=5, vertex.label="")
Решение # 1 Настройка веса ребер
Если вам не нужно использовать веса ребердля всего остального вы можете просто установить веса на что-то низкое, чтобы между соединенными точками не было такого сильного притяжения.Возможно, вам придется поэкспериментировать, чтобы найти подходящее значение для весов.
E(G)$weight = 0.01
LO = layout_with_fr(G)
plot(G, layout=LO, vertex.size=5, vertex.label="")
Решение # 2 Прямая настройка макета
Вы также можете напрямую настроить макет.
Сначала я определяю, какие узлы слишком тесно сгруппированы.
CM = components(G)$membership
table(CM)
Для моего графа компонент 1 - это тот, который я хочу расширить.Затем я просто смещаю макет так, чтобы он центрировался по центру первого компонента.Это не меняет график;это просто позволяет мне настроить макет.
LO = layout_with_fr(G)
LO[,1] = LO[,1] - mean(LO[CM == 1,1])
LO[,2] = LO[,2] - mean(LO[CM == 1,2])
Но теперь я могу увеличивать (или уменьшать) первый компонент на любой заданный коэффициент расширения.Я выбираю один (5.5), чтобы занять большую часть пустого пространства.
LO[components(G)$membership == 1,] = LO[components(G)$membership == 1,] * 5.5
plot(G, layout=LO, vertex.size=5, vertex.label="")
Конечно, если вы хотите вернуться и настроить другиекомпоненты, вы могли бы сделать это тоже.