2012-10-05 1 views
1
df 

network bus_unit outage 
A  Online  4 
B  Internal 5 
A  Finance 6 
B  IT   5 
A  IT   6 
A  Marketing 40 

Je dois greate un igraph que je peux faire quelque chose comme ceci:sommet réarranger dans igraph

g <- graph.data.frame(df) 
plot(g, 
    layout = layout.fruchterman.reingold, 
    vertex.label = V(g) $name, 
    vertex.label.color= "black", 
    edge.arrow.size=1, 
    edge.curved=FALSE, 
    edge.label=df$outage) 

Mon problème est que j'aime montrer le réseau A ontop du graphique depuis c'est le coupable. Y at-il de toute façon organiser cette igraph, déplacer le vertex autour, etc.

merci pour votre aide.

+0

http://lists.gnu.org/archive/html/igraph-help/2012-10/msg00030.html –

Répondre

2

Lorsque vous transmettez layout = layout.fruchterman.reingold à plot(), vous lui donnez une fonction pour construire la mise en page. Mais vous pouvez également configurer la mise en page en dehors de de plot() et de le manipuler directement - c'est une simple matrice de coordonnées.

# Create an initial layout 
bad.a.layout <- layout.fruchterman.reingold(g) 

# ... it's really just a matrix of coordinates, with each row 
# corresponding to a vertex 
bad.a.layout 
plot(g, layout = bad.a.layout) 

# Tweak arbitrarily - e.g., bump Network A nodes up a bit on the y-axis 
bad.a.layout[V(g)$network %in% "A", 2] <- bad.a.layout[V(g)$network %in% "A", 2] + 10 
plot(g, layout = bad.a.layout) 

Bien sûr, il n'y a aucune garantie que cela va réellement bien paraître. Mais c'est une approche de base pour modifier les mises en page qui vous conviennent. S'il s'agit d'un projet ponctuel, la manipulation manuelle pourrait être bonne. Sinon, vous voudrez probablement étudier les algorithmes plus en profondeur (ce qui s'est avéré un peu un trou de lapin pour moi, mais vous pourriez avoir plus de chance). Note latérale: Je configure presque toujours mes mises en page en dehors de la fonction de traçage, même quand je ne veux pas les manipuler. Même avec des graphiques de taille moyenne, il est possible de gagner beaucoup de temps à ne pas recalculer chaque fois que vous exécutez le tracé.