Я оцениваю сети с 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" отсутствует, значение по умолчанию отсутствует.
Как я могу установить цвета?
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")
Похожие вопросы
Новые вопросы
r
R - это бесплатный язык программирования с открытым исходным кодом и программная среда для статистических вычислений, биоинформатики, визуализации и общих вычислений. Пожалуйста, предоставьте минимальные и воспроизводимые примеры вместе с желаемым результатом. Используйте dput () для данных и укажите все небазовые пакеты с вызовами library (). Не вставляйте изображения для данных или кода, вместо этого используйте блоки кода с отступом. По вопросам, связанным со статистикой, используйте https://stats.stackexchange.com.