Я оцениваю сети с 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, "white"): аргумент "no" отсутствует, значение по умолчанию отсутствует.

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

0
user10293275 23 Сен 2018 в 13:55

1 ответ

Лучший ответ

Здесь есть две проблемы. Сначала функция 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")

1
G5W 23 Сен 2018 в 17:04