Comment contrôler le igraph de la parcelle mise en page avec des Positions Fixes?
Je suis en train de dessiner un réseau de visualisation pour ressembler à un diagramme de flux. Je suis assez proche avec le code suivant, mais j'ai quelques questions:
- Est-ce la meilleure mise en page() l'algorithme, ou puis-je attribuer manuellement une position pour chaque nœud>
- Comment puis-je m'assurer que ces nœuds ne se chevauchent pas dans l'intrigue (comme ils le font ici)?
- Puis-je attribuer un nœud comme une "ancre" ou le point de départ? c'est à dire, je peux faire "C" le plus haut ou le plus à gauche du nœud?
Merci beaucoup!!
library("igraph")
L3 <- LETTERS[1:8]
d <- data.frame(start = sample(L3, 16, replace = T), end = sample(L3, 16, replace = T),
weight = c(20,40,20,30,50,60,20,30,20,40,20,30,50,60,20,30))
g <- graph.data.frame(d, directed = T)
V(g)$name
E(g)$weight
ideg <- degree(g, mode = "in", loops = F)
col=rainbow(12) # For edge colors
plot.igraph(g,
vertex.label = V(g)$name, vertex.label.color = "gray20",
vertex.size = ideg*25 + 40, vertex.size2 = 30,
vertex.color = "gray90", vertex.frame.color = "gray20",
vertex.shape = "rectangle",
edge.arrow.size=0.5, edge.color=col, edge.width = E(g)$weight / 10,
edge.curved = T,
layout = layout.reingold.tilford)
Vous devez vous connecter pour publier un commentaire.
La mise en page dans igraph est défini dans une matrice avec 2 colonnes et une ligne pour chaque nœud. La première colonne indique sa position x et la seconde sa position sur l'axe y, et l'échelle n'est pas pertinent (c'est toujours redimensionnée pour s'adapter à un -1 à 1 zone de traçage. Vous pouvez obtenir cette mise en page avant de traçage simplement en appelant la mise en page fonctionnent sur le graphique:
De cette façon, vous pouvez le modifier comme vous le voulez manuellement, puis de l'envoyer à l'intrigue:
Il semble également que vous pouvez définir à l'argument
params
pour contrôler la mise en page abit. C'est une liste contenant un argumentroot
qui, apparemment, peut être utilisée pour définir la racine du graphe. Attribuer ce un certain nombre de nœud (renember que igraph utilise C comme les indices des nœuds, une première est 0). La racine "C":EDIT: le
RGraphViz
a quelques beaux arbres mises en page qui pourrait être la peine de vérifier.EDIT 2:
C'est une modification de l'extrait de code de le code source de mon colis, qui utilise un même type de matrice de présentation pour définir le placement des nœuds dans un graphe, que vous pourriez trouver utiles:
Ce que cette fonction n'est de transformer une matrice en précisant la mise en page en grille (similaire à
layout()
) pour une disposition en deux colonnes avec x et y des positions. Définir une matrice de zéros et pour chaque nœud entier allant de 1 au nombre total de nœuds ( c'est le igraph ID + 1 ).Par exemple, pour un idiot 4 nœud graphique:
Error in ncol(x) : object 'L' not found
. Dans la ligne deplot(g,layout=gridLayout(L))
il peut y avoir un problème que je ne pouvais pas comprendre.Moins compliqué méthode que ci-dessus si vous souhaitez affecter le nœud emplacements de vous-même est d'ajouter des colonnes, intitulées x et y dans votre feuille de données avec les coordonnées x et y pour les nœuds respectifs dans ces colonnes. par exemple,