R: выборочное отображение узлов при построении графа.

Как я могу построить набор узлов igraph?

У меня есть график, но он слишком сложный. Я хочу иметь возможность «увеличивать» подмножество узлов.

Я могу удалить подмножество ребер, но не могу понять, как «выключить» изолированные узлы.

При использовании пакета network это делает параметр displayisolates=FALSE; он не отображает эти изолированные узлы.

Алгоритм компоновки также должен игнорировать «выключенные» края.

Например:

g1 <- graph( c( 0,1, 1,2, 2,2, 2,3 ) )
g2 <- delete.edges(g1, E(g1, c(0,1)))
plot(g2)

При построении g2 я хочу не отображать узел 0.

Спасибо


person Dennis    schedule 13.04.2011    source источник
comment
Не могли бы вы предоставить некоторые данные или графический пример того, что вы пытаетесь сделать?   -  person Brandon Bertelsen    schedule 13.04.2011
comment
Черт возьми, я не знаю здесь этикет, но я ответил на свой вопрос. Вы просто УДАЛИТЕ вершины. В приведенном выше примере вы должны g3 <- delete.vertices(g2, 0)   -  person Dennis    schedule 14.04.2011


Ответы (3)


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

Я просто хотел указать, что в приведенном выше ответе Wine коррекция индекса «- 1» в функции deletes.isolates не требуется, начиная с igraph 0.6 и далее. См. Также комментарий Тамаса:

Наносит на график только края с определенным весом - igraph

person F. Witmer    schedule 08.03.2013

Эй, похоже, вы это догадались, но, исследуя вопрос (я обычно сам использую сетевой пакет, но также пытался использовать igraph для некоторых вещей), я придумал функцию, которая должна делать это автоматически, отражая displayisolates = F функциональность.

delete.isolates <- function(graph, mode = 'all') {
  isolates <- which(degree(graph, mode = mode) == 0) - 1
  delete.vertices(graph, isolates)
}

В вашем случае запуск этого с g1 приведет к удалению первой вершины, если вы использовали аргумент mode = 'in' и последней вершины, если вы использовали аргумент mode = 'out'.

Итак, в вашем случае, если вы ввели:

g2 <- delete.isolates(g1, mode = 'in')
plot(g2)

Вы должны получить то, что хотите. Я не очень часто использую igraph, поэтому вполне возможно, что эта функция столкнется с некоторыми проблемами для других графиков.

P.S. Это также дает какой-то странный результат: в новом g2 первая вершина теперь является изолированной на основе степени. Эта функция, вероятно, бесполезна в большинстве ситуаций, но может быть полезна для создания более четкого графика.

person Wine    schedule 14.04.2011

person    schedule
comment
Пожалуйста, добавьте контекст к вашему ответу. - person coatless; 29.03.2017