Как изменить цвет вершины при построении сети с помощью igraph в зависимости от конкретного атрибута актера? - PullRequest
0 голосов
/ 23 сентября 2018

Я оцениваю сети с ERGM с использованием пакета statnet в R. Я хотел бы визуализировать сеть, используя пакет igraph с размером по степени центральности и цветом узла по позиции лидера.Для объяснения: это сеть общего лидерства, и я хочу визуализировать, имеет ли человек формальную руководящую должность (LSPosition = 1), визуализируется черным или нет (LSPosition = 0), визуализируется белым.

Этомой код до сих пор (graphExample - моя сеть, Data_Axample - набор данных атрибута актера):

library(igraph)
degreeExample <- centralization.degree(graphExample)$res
    V(graphExample)$size <- degreeExample
    V(graphExample)$LSPosition <- Data_Example$LSPosition
    colrs <- colors(c("black","white"))
    V(graphExample)$color <- colrs[V(graphExample)$LSPosition]
    E(graphExample)$arrow.size <- 0.5
    plot(graphExample, vertex.label = NA, vertex.label.family = "Arial")
    legend("bottomleft", c("Employee in no leading position",
                           "Employee in a leading position"), 
           pch = 21, col = "#777777", pt.bg = colrs, pt.cex = 2, cex = 0.8, bty = "n", ncol = 1)

Проблема в том, что для colrs <- colors(c("black","white")) я получаю следующую ошибку:

Error in if (distinct) c[!duplicated(t(col2rgb(c)))] else c : 
  argument is not interpretable as logical
In addition: Warning message: In if (distinct) c[!duplicated(t(col2rgb(c)))] else c : 
the condition has length > 1 and only the first element will be used

Я также попробовал следующее:

V(graphExample)$color <- ifelse(V(graphExample)$LSPosition==1, "black", ifelse(V(graphExample)$LSPosition==0, "white"))

Но я получаю ошибку:

Ошибка в ifelse (V (graphSLO_V1) $ PositionO == 0, "белый""): отсутствует аргумент" нет ", без значения по умолчанию.

Как установить цвета?

1 Ответ

0 голосов
/ 23 сентября 2018

Здесь есть две проблемы.Во-первых, функция colors выводит список всех доступных цветов по имени.Я думаю, что вы просто пытаетесь получить список с цветами "черный" и "белый". Это проще, чем вы пытались. Все, что вам нужно, это colrs <- c("black","white"). Но, согласно вашему описанию, V(graphExample)$LSPosition будет иметь значениялибо 0, либо 1. Список colrs должен быть проиндексирован на 1 или 2. Простая вещь, которую нужно сделать, это просто сдвинуть индексы, используя

V(graphExample)$color <- colrs[V(graphExample)$LSPosition + 1]

Но это приведет к (LSPosition = 0)быть черным (вы хотели белый) и (LSPosition = 1) быть белым (вы хотели черный), поэтому я бы использовал строку с +1, как указано выше, но изменил определение colrs на colrs <- c("white", "black")

...