2015-08-28 4 views
6

Ich versuche, ein Diagramm zu plotten, das nur die Beschriftungen für bestimmte Eckpunkte anzeigt. In diesem Fall möchte ich nur Beschriftungen für Stützpunkte mit einer bestimmten Anzahl von Kanten anzeigen.Zeigen Sie nur bestimmte Beschriftungen im Netzwerk-Diagramm mit Igrap in R

lese ich Ecken und Kanten in das Diagrammobjekt in etwa so:

nodes <- read.csv("path_to_file.csv") 
edges <- read.csv("path_to_file.csv") 
g <- graph_from_data_frame(edges,directed=TRUE,vertices=nodes) 

ich den folgenden Befehl verwenden, um die Grafik zu plotten und variieren die Breite der Kante basierend auf der Anzahl von Verbindungen (die rels $ Attribut ist die Anzahl der Verbindungen zwischen zwei Knoten):

plot.igraph(g,vertex.size=3,vertex.label.cex=0.5,layout=layout.fruchterman.reingold(g,niter=10000),edge.arrow.size=0.15,edge.width=E(g)$rels/100) 

gibt es eine Möglichkeit zum Beispiel zu sagen, dass nur Ecken mit> 100 Kanten sollen ihr Label angezeigt haben? Wenn ich versuche, Vertex-Labels in meinen CSV-Dateien zu hinterlassen, denkt iigraph, dass es sich um doppelte Vertices handelt.


Beispiele für Daten

nodes.csv 
name | org_id 
U.S. Department of Energy | 70063 
Environmental Protection Agency | 100000 

edges.csv 
from | to | rels 
U.S. Department of Energy | Hanford SSAB | 477 
Natural Resources Defense Council | Environmental Protection Agency | 322 
+2

Sie haben war auf SO für eine Weile, also sollten Sie jetzt wissen, dass die Bereitstellung Ihrer Daten oder zumindest einer repräsentativen Stichprobe erwartet wird. Ansonsten müssen wir Daten für Sie erstellen, um eine Lösung zu demonstrieren. – jlhoward

+0

@jlhoward Großer Punkt, danke! Hinzugefügt. – tchaymore

Antwort

6

Versuchen

library(igraph) 
set.seed(1) 
g <- sample_pa(20) 
V(g)$label <- letters[1:20] 
plot(g, vertex.label = ifelse(degree(g) > 2, V(g)$label, NA)) 

für Ecken mit einem Grad größer als 2 nur die Etiketten anzuzeigen:

enter image description here

+0

eine (ziemlich späte) Follow-up-Frage zu Ihrer Antwort und meine Frage ist eng verwandt mit dieser Frage (warum stelle ich keine "neue" Frage): Wenn Sie nicht Grad oder Betweenness-Zentralität, sondern Eigenvektor verwenden Oder wie würde Ihre Suggestion dann funktionieren (da Sie den Vektor angeben müssen, um mit den Werten richtig zu arbeiten)? Haben Sie (oder jemand anderes) eine Idee? –

+0

@Stefan_W Es ist am besten, eine neue Frage zu öffnen, die ein kleines Beispiel zeigt, was du versucht hast und warum es nicht funktioniert hat. – lukeA

Verwandte Themen