2017-05-26 3 views
1

J'essaie de tracer un réseau bipartite avec les bords de la même couleur que l'un de leurs nœuds. Par exemple, prenons l'exemple d'un graphe bipartite film/acteur, avec 7 films et 15 acteurs, et chaque acteur a une nationalité.
Je veux avoir le bord entre un acteur et un film de la même couleur que la nationalité de l'acteur.Choisir la couleur ggraph R

NG1 <- 7 
NG2 <- 15 
Nat <- sample(x = c("French", "English", "Italian", "American", "Chinese"), size = NG2, replace = T) 
G <- graph.empty(NG1+NG2) 

[Ici, head(Nat) retours "Italian" "English" "American" "French" "French" "French"]
Le code pour créer le edgelist:

E1 <- sample(x=1:NG1, size = 30, replace = T) 
E2 <- sample(x=(NG1+1):(NG1+NG2), size = 30, replace = T) 
EL <- c(rbind(E1, E2)) 
G <- add_edges(G, EL, nat = Nat[E2-NG1]) 

[Ici, head(EL) retours 1 14 3 13 2 15]
Les différents aes arguments:

GROUP <- c(rep("Movie", NG1), rep("Act", NG2)) 
COL <- c(rep("Movie", NG1), Nat) 
TXT <- c(as.character(1:NG1), letters[1:NG2]) 

Et maintenant le graphique i IRECTIVES:

ggraph(G, layout = 'kk') + 
     geom_node_point(aes(col = COL, shape = GROUP, size = 7)) + 
     geom_edge_link(aes(col = nat)) + 
     geom_node_text(aes(label = TXT), size = 4) 

Plot

Comme vous pouvez le voir dans le fond, l'acteur a, qui est Italien a un nœud bleu, mais est relié à un bord rose avec le film 7 ... Comment puis-je spécifier la palette de couleurs pour les nœuds (ici 6 couleurs) et les arêtes (les 5 premières couleurs des nœuds)?

J'espère que j'ai clarifié.

Répondre

1

Après deux heures, j'ai enfin trouvé une solution!

I utilise la fonction gg_color_hue défini here pour émuler les 6 couleurs utilisées pour les noeuds et ensuite:

+ scale_edge_colour_manual(values = cols[1:5])