2011-04-13 4 views
3

Comment tracer une sélection de nœuds igraph?R: Affichage sélectif des nœuds lors du tracé d'un igraph

J'ai un graphique existant, mais c'est trop complexe. Je veux pouvoir «zoomer» sur un sous-ensemble des nœuds.

Je suis capable de supprimer un sous-ensemble d'arêtes, mais je n'arrive pas à comprendre comment «désactiver» les nœuds isolés.

Lors de l'utilisation du package réseau, le paramètre displayisolates=FALSE le fait; il n'affiche pas ces noeuds isolés.

L'algorithme de mise en page doit également ignorer les bords «désactivés».

Par exemple:

g1 <- graph(c(0,1, 1,2, 2,2, 2,3)) 
g2 <- delete.edges(g1, E(g1, c(0,1))) 
plot(g2) 

Lors du traçage g2, je veux pas afficher noeud 0.

Merci

+1

Pouvez-vous fournir des données, ou un exemple graphique de ce que vous essayez de faire? –

+2

Oh, je ne connais pas l'étiquette ici, mais j'ai répondu à ma propre question. Vous venez de supprimer les sommets. Dans l'exemple ci-dessus, vous devriez 'g3 <- delete.vertices (g2, 0)' – Dennis

Répondre

6

Je comprends que les utilisateurs ne devraient pas soumettre de nouvelles réponses pour commenter d'autres réponses, mais ma modification a été rejetée et je n'ai pas une réputation assez élevée pour laisser des commentaires. Je voulais juste souligner que dans la réponse de Wine ci-dessus, la correction d'index "- 1" dans la fonction deletes.isolates n'est pas nécessaire à partir de igraph 0,6. Voir aussi le commentaire de Tamas ici:

Plot only Edges with a specific weight - igraph

3

Hé, on dirait que vous deviné, mais à explorer la question (J'utilise habituellement le paquet réseau moi-même, mais j'ai essayé d'utiliser igraph aussi pour certaines choses) Je suis venu avec une fonction qui devrait le faire automatiquement, en reflétant la fonction displayisolates = F functinality.

delete.isolates <- function(graph, mode = 'all') { 
    isolates <- which(degree(graph, mode = mode) == 0) - 1 
    delete.vertices(graph, isolates) 
} 

Dans votre cas, avec l'exécution de ce g1 supprimerait le premier sommet si vous avez utilisé le mode argument = « dans » et le dernier sommet si vous avez utilisé le mode argument = « out ».

Donc, dans votre cas, si vous avez entré:

g2 <- delete.isolates(g1, mode = 'in') 
plot(g2) 

Vous devriez obtenir ce que vous voulez. Je n'utilise pas beaucoup igraph, il est donc très possible que cette fonction rencontre des problèmes pour d'autres graphes.

P.S. Cela donne aussi le genre de résultat bizarre que dans le nouveau g2, le premier sommet est maintenant un isolat basé sur l'indegree. Cette fonction n'est probablement pas utile dans la plupart des cas, mais peut être utile pour créer une intrigue plus propre.

1
iso <- V(g1)[degree(g1)==0] 
g2 <- delete.vertices(g1, iso) 
+1

S'il vous plaît ajouter le contexte à votre réponse. – coatless

Questions connexes