R: выборочно отображать узлы при построении igraph - PullRequest
3 голосов
/ 13 апреля 2011

Как я могу построить выбор узлов 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.

Спасибо

Ответы [ 3 ]

7 голосов
/ 08 марта 2013

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

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

Только для печати Края с определенным весом - igraph

3 голосов
/ 14 апреля 2011

Эй, похоже, вы поняли это, но при изучении вопроса (я обычно использую сетевой пакет, но в некоторых случаях я тоже пытался использовать igraph) я придумал функцию, которая должна делать это автоматически , зеркальное отображение дисплея = 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 первая вершина теперь является изолятом на основе степени. Эта функция, вероятно, бесполезна в большинстве ситуаций, но может быть полезна для создания более чистого графика.

1 голос
/ 29 марта 2017
iso <- V(g1)[degree(g1)==0]
g2 <- delete.vertices(g1, iso)
...