Показывать только определенные метки на сетевом графе с помощью igraph в R

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

Я читаю вершины и ребра графического объекта следующим образом:

nodes <- read.csv("path_to_file.csv")
edges <- read.csv("path_to_file.csv")
g <- graph_from_data_frame(edges,directed=TRUE,vertices=nodes)

Я использую следующую команду для построения графика и изменения ширины края в зависимости от количества соединений (атрибут $ rels - это количество соединений между двумя вершинами):

plot.igraph(g,vertex.size=3,vertex.label.cex=0.5,layout=layout.fruchterman.reingold(g,niter=10000),edge.arrow.size=0.15,edge.width=E(g)$rels/100)

Есть ли способ сказать, например, что только вершины с> 100 ребрами должны отображать свои метки? Если я попытаюсь оставить метки вершин в своих файлах csv, igraph решит, что это дублированные вершины.


Примеры данных

nodes.csv
name | org_id
U.S. Department of Energy | 70063
Environmental Protection Agency | 100000

edges.csv
from | to | rels
U.S. Department of Energy | Hanford SSAB | 477
Natural Resources Defense Council | Environmental Protection Agency | 322

person tchaymore    schedule 28.08.2015    source источник
comment
Вы уже некоторое время используете SO, так что теперь вы должны знать, что ожидается предоставление ваших данных или, по крайней мере, репрезентативной выборки. В противном случае, чтобы продемонстрировать решение, нам придется подделать данные для вас.   -  person jlhoward    schedule 28.08.2015
comment
@jlhoward Отличный момент, спасибо! Добавлен.   -  person tchaymore    schedule 29.08.2015


Ответы (1)


Пытаться

library(igraph)
set.seed(1)
g <- sample_pa(20)
V(g)$label <- letters[1:20]
plot(g, vertex.label = ifelse(degree(g) > 2, V(g)$label, NA))

чтобы отображать только метки для вершин со степенью больше 2:

введите описание изображения здесь

person lukeA    schedule 28.08.2015
comment
(довольно поздно) последующий вопрос к вашему ответу, и мой вопрос тесно связан с этим (почему я не задаю «новый» вопрос): если вы не используете степень или центральность между центральностью, а собственный вектор или центральность концентратора, как тогда будет работать ваше предложение (поскольку вам нужно указать вектор для правильной работы со значениями)? Есть ли у вас (или у кого-нибудь еще) идея? - person Stefan_W; 20.10.2017
comment
@Stefan_W Лучше всего открыть новый вопрос, который демонстрирует небольшой пример, что вы пробовали и почему это не сработало. - person lukeA; 20.10.2017