2017-09-18 5 views
1

Salut J'utilise igraph pour faire une union de deux arbres. En faisant cette union, notez que les deux arbres ont des noms communs. Je veux colorer l'union du graphe de sorte que la couleur des arêtes soit préservée.igraph - Couleur des bords de l'union de deux arbres différents

n<-3 
n2<-3 
tree<-make_tree(n) 
tree2<-make_tree(n2) 

tree<-set.vertex.attribute(tree, "name", value=letters[1:n]) 
tree2<-set.vertex.attribute(tree2, "name", value=sample(letters[1:n2])) 
E(tree)$color <- "blue" 
E(tree2)$color<-"red" 
plot(tree) 
plot(tree2) 
tree_union<-tree %u% tree2 
plot(tree_union) 

Par exemple, a-> b et a-> c est encore bleu (arbre) et c-> a et c-> b est toujours rouge (tree2). Évidemment, je ne veux pas définir manuellement la couleur de chaque bord. Je pensais quelque chose comme

E(tree_union)[E(tree_union)==E(tree)]$color<-"blue" 

mais, cela ne fonctionne pas parce que l'égalité ne vérifie pas si deux bords sont égaux.

Répondre

1

Les couleurs d'origine ont été conservées dans color_1 et color_2. Vous pouvez donc facilement créer une variable de couleur pour conserver les couleurs de bord. Cependant, dans certains cas, l'un de vos bords se superpose à un autre, de sorte que tout ce que vous voyez est la tête de la flèche.

TU_col = edge_attr(tree_union, "color_1") 
E2 = which(is.na(edge_attr(tree_union, "color_1"))) 
TU_col[E2] = edge_attr(tree_union, "color_2")[E2] 
tree_union2 = set_edge_attr(tree_union, "color", value=TU_col) 
plot(tree_union2) 

Tree union with color