R цвет вершин по столбцу

Я использую iGraph для построения графиков. В моей матрице всего два столбца — A и B. Мне нужно раскрасить узлы всего двумя цветами — это указывает на узлы, принадлежащие A, и узлы, принадлежащие B. Например:

# k is a df with 2 columns – A and B
k_mx <- as.matrix(k)
k_mx_g <- graph.edgelist(k_mx, directed = FALSE)
V(k_mx_g)$color = ?? ( want blue for A and red for B)

Пожалуйста, дайте мне знать, как это сделать.

Спасибо, ПД


person user1717931    schedule 12.07.2013    source источник


Ответы (1)


Предполагая, что этот кадр данных:

k <-     structure(list(A = 1:4, B = 5:8), 
                 .Names = c("A", "B"), row.names = c(NA, -4L),
                  class = "data.frame")

... вы можете использовать rep с аргументом each. В противном случае они будут последовательно помечены c("синий", "красный", "синий", "красный", "синий", "красный", "синий", "красный") из-за повторного использования аргумента:

V(k_mx_g)$color <- rep(c("blue", "red"), each=4)

Комментарий Габора заставляет меня предложить этот вариант, который кажется более общим:

V(k_mx_g)[k$A]$color <- "blue"
V(k_mx_g)[k$B]$color <- "red"
person IRTFM    schedule 12.07.2013
comment
К сожалению, если это сработает, то сработает только случайно, потому что у вас 1:4 в первом столбце и 5:8 во втором. - person Gabor Csardi; 13.07.2013
comment
Это началось как data.frame на пути к матрице. Нас заставили поверить, что весь первый столбец был A и должен быть назначен синим, а весь второй столбец должен быть назначен красным. Сколько шансов связано с этой процедурой? - person IRTFM; 13.07.2013
comment
Хммм, я думаю, что другой вариант правильный, но вы должны быть осторожны, чтобы иметь числа во фрейме данных, иначе вы бы индексировали с коэффициентом. Кроме того, очевидно, это работает только в том случае, если граф двудольный, т.е. вершины в столбце A не отображаются в столбце B, но я думаю, что у плаката есть такой граф, иначе вопрос не имеет смысла. - person Gabor Csardi; 13.07.2013
comment
DWin: комментарий — не очень удобный способ ответить на этот вопрос должным образом, но как вы можете быть уверены, что вершины 1:4 находятся в его первом столбце? Может быть, я что-то упустил, к сожалению, постер не предоставил никаких данных, чтобы быть уверенным. - person Gabor Csardi; 13.07.2013
comment
Я должен что-то упустить, так как я думал, что использование значений столбца фрейма данных устранит любую двусмысленность. - person IRTFM; 13.07.2013
comment
Когда вы говорите V(k_mx_g)[1:4], это означает первые четыре вершины. Но вы не можете быть уверены, что они находятся в первом столбце. В вашем примере они есть, но обычно это явно не так. Как вы сами говорите, это работает только для вашего простого примера. Это все, что я имел в виду. - person Gabor Csardi; 13.07.2013
comment
Спасибо за ваш вклад. Чтобы развеять все предположения, поясню еще немного. Первый столбец — это идентификатор события (E000123, E000345,..), а второй — имя сервера (SP645BKP23, SP77PD98,..). Это разные значения, которые никогда не пересекаются. Да, его можно рассматривать как двудольный граф. На данный момент в моем наборе данных у меня есть только один сервер. Итак, граф оказывается звездным графом. Мне просто нужно покрасить имя моего сервера по-другому. - person user1717931; 17.07.2013