К сожалению, вы установили случайное начальное число после того, как вы сгенерировали график, поэтому мы не можем точно воспроизвести ваш результат.Я буду использовать тот же код, но с set.seed
до генерации графика.Это приводит к тому, что результат будет отличаться от вашего, но будет воспроизводимым.
Когда я запускаю ваш код, я не вижу точно такой же проблемы, как вы показываете.
Ваш код (с перемещением set.seed
и добавлением scales
)
library(igraph)
library(scales) # for rescale function
# make graph
set.seed(123)
g <- barabasi.game(25)
# make graph and set some aestetics
l <- layout_nicely(g)
V(g)$size <- rescale(degree(g), c(5, 20))
V(g)$shape <- 'none'
V(g)$label.cex <- .75
V(g)$label.color <- 'black'
E(g)$arrow.size = .1
## V(g)$names = 1:25
# plot graph
dev.off()
par(mfrow = c(1,2),
mar = c(1,1,5,1))
plot(g, layout = l,
main = 'Entire\ngraph')
# use index & induced subgraph
v_ids <- sort(sample(1:25, 15, F))
sub_l <- l[v_ids, c(1,2)]
sub_g <- induced_subgraph(g, v_ids)
# plot second graph
plot(sub_g, layout = sub_l,
main = 'Sub\ngraph', vertex.label=V(sub_g)$names)
Когда я запускаю Ваш код , оба графика имеют узлы в одинаковых позициях.Это не то, что я вижу на графике в вашем вопросе.Я предлагаю вам запустить только этот код и посмотреть, не получите ли вы тот же результат (узлы в одинаковых позициях на обоих графиках).Единственная разница между двумя графиками в моей версии - это метки узлов.Когда вы берете подграф, он нумерует узлы от 1 до 15, поэтому метки на узлах не совпадают.Это можно исправить, сохранив метки узлов на графике, прежде чем брать подграф.В частности, добавьте V(g)$names = 1:25
сразу после вашего заявления E(g)$arrow.size = .1
.Затем снова запустите все это , начиная с set.seed(123)
.Это сохранит исходную нумерацию в качестве меток узла.
График выглядит немного иначе, поскольку новый подграф не занимает все пространство и растягивается, чтобы использовать пустоепространство.