2015-03-06 3 views
0

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

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 в красном цвете, а все другой в BLACK.
Чтобы быть ясно, мне нужно в красном цвете следующих соединений линии

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

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

+0

Просьба предоставить полный [воспроизводимый код] (http://adv-r.had.co.nz/Reproducibility .html). – lukeA

+0

Привет, Люк, код встроен в другие вычисления. Я представил только пример, данные извлекаются из базы данных, и я воспроизвожу около 25 разных графиков в разных ситуациях, я попытаюсь создать код для этого конкретного примера, чтобы помочь вы помогаете мне. –

+0

Код также должен быть _minimal_ - небольшая работа кадра, которую вы позже можете применить к вашему реальному случаю. Это включает в себя необходимые вызовы библиотеки, dput для получения переменных и так далее. Делает это проще для всех - и получает ответы. :-) – lukeA

ответ

1

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

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) 

enter image description here

+0

P.S. жаль, что у меня уже был код, написанный, когда я заметил ваши данные образца в комментариях ... Во всяком случае, я не думаю, что у вас возникнут проблемы с адаптацией моего кода к вашему;) – digEmAll

+0

WOW ... вы решили мою проблему! ! большое спасибо –

1

Просто создать цветовой вектор с цветами, которые вы хотите, соответствующее ребра в 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) 
+0

Это очень хорошее решение, я сравню оба из них с точки зрения устойчивости, спасибо lukeA –

Смежные вопросы