Раскраска графа связности в R

Я построил R граф, и мне удалось раскрасить некоторую вершину, используя оператор if в цвете, я использовал tkplot функция, чтобы иметь лучшую визуализацию.
Теперь у меня есть следующий график:

FROM    TO  
A   B
A   D
B   C
B   F
D   E
E   G
E   H
H   M
H   L
L   N

и следующий набор вершин

E  
L

Мне нужно построить график, окрашивающий входящие и исходящие соединения в E и L в КРАСНЫЙ цвет, а все остальные в ЧЕРНЫЙ.
Чтобы было понятно, мне нужны красные линии подключения

FROM    TO
D   E
E   G
E   H
H   L
H   M

Есть ли решение для этого?

2 ответа

Решение

С помощью edge.color собственность не единственный путь. Вы также можете установить color атрибут для каждого ребра, например:
(больше информации о V(g) а также E(g) функции можно найти здесь)

library(igraph)

# initialize the graph
DF <- 
read.table(text=
"FROM TO  
A B
A D
B C
B F
D E
E G
E H
H M
H L
L N",header=T,stringsAsFactors=T)
g <- graph.data.frame(DF)

# set a color (black) attribute on all edges
E(g)$color <- 'black'
# set red color for the edges that have an incident vertex in the set 'E,L'
nodesSeq <- V(g)[name %in% c('E','L')]
E(g)[inc(nodesSeq)]$color <- 'red'

tkplot(g)

Просто создайте цветовой вектор с желаемыми цветами, соответствующими краям в B:

library(igraph) 
B = matrix( c("A" ,"A", "B" ,"B","D","E", "E", "H", "H", "L", "B","D","C","F","E","G","H","M","L","N"), ncol=2) 
B<- data.frame(B) 
grf<- graph.data.frame (B, directed =TRUE, vertices=NULL) 
error<-array(c("E", "L")) 
V(grf)$color <- ifelse(V(grf)$name %in% error, "red", "yellow") 

col = rep("black", nrow(B)) 
col[B$X1 == "E" | B$X2 == "L"] <- "red" 
# or 
# col[B$X1 %in% c("E", "L") | B$X2 %in% c("E", "L")] <- "red" 
plot(grf, edge.color = col)
# or     
# tkplot(grf, edge.color = col)
Другие вопросы по тегам