2016-04-25 5 views
3

Ich zeichne Netzwerkgraph in R mit `igraph1. Das Netzwerk hat 1.380 Knoten und etwa 150k Kanten. Hier ist die Zusammenfassung von IGRAPH:Farbpalette für Scheitelpunkte in einem Netzwerk in R

IGRAPH UN-- 1380 159718 -- 
+ attr: name (v/c), rels (v/n), label (v/n), degree (v/n), btw (v/n), color (v/c), rels (e/n) 

Ich versuche, einen Farbverlauf hinzufügen, die Farben die Knoten auf ihre Zentralität basiert. Ich habe ein paar verschiedene Versionen Code versucht, zuerst von dieser example:

# calculate betweenness 
V(g_yearly)$btw <- betweenness(g_yearly) 

# construct color palette 
fine <- 100 
palette <- colorRampPalette(c('blue','green')) 

# assign palette to nodes 
V(g_yearly)$color <- palette(fine) [as.numeric(cut(V(g_yearly)$btw,breaks=fine))] 

# plot network 
plot.igraph(g_yearly,vertex.shape="circle",vertex.size=1,vertex.label.cex=0.6,layout=lgl(g_yearly),edge.arrow.size=0,edge.width=E(g_yearly)$rels/50) 

bekomme ich folgende Fehler und Traceback:

Error in seq.int(0, 1, length.out = n) : 
    'length.out' must be a non-negative number 
    9 .approxfun(x, y, v, method, yleft, yright, f) 
    8 palette[[1L]](x) 
    7 cbind(palette[[1L]](x), palette[[2L]](x), palette[[3L]](x), if (alpha) palette[[4L]](x)) 
    6 pmin(rgb, 1) 
    5 pmax(pmin(rgb, 1), 0) 
    4 roundcolor(cbind(palette[[1L]](x), palette[[2L]](x), palette[[3L]](x), 
if (alpha) palette[[4L]](x))) 
    3 ramp(seq.int(0, 1, length.out = n)) 
    2 palette(palette) 
    1 plot.igraph(g_yearly, vertex.shape = "circle", vertex.size = 1, 
vertex.label.cex = 0.6, layout = layout.lgl(g_yearly), edge.arrow.size = 0, 
edge.width = E(g_yearly)$rels/50) 

In addition: Warning message: 
In .approxfun(x, y, v, method, yleft, yright, f) : 
NAs introduced by coercion 

Wenn ich die rainbow Funktion stattdessen verwenden, funktioniert dies nur gut :

V(g_yearly)$color <- rainbow(V(g_yearly)$btw,start=3/6,end=4/6) 

Merkwürdig ist, dass, nachdem ich einmal das erste Bit Code ausgeführt habe, kann ich nicht Plot im Netzwerk zu laufen scheinen, ohne die gleichen Fehler - auch wenn ich r Anrufe an palette.

Was mache ich falsch mit palette?

+0

Wie Sie einen Traceback bekommen hat?!? –

Antwort

1

Ich denke, die Probleme in dieser Linie ist:

# assign palette to nodes 
V(g_yearly)$color <- palette(fine [as.numeric(cut(V(g_yearly)$btw,breaks=fine))] 

Das Argument palette einzelne ganze Zahl sein sollte und fine ist ein Vektor der Länge so 1 zu indizieren versucht es mit etwas anderes als 1 fehl. Versuchen:

V(g_yearly)$color <- palette(fine)[ as.numeric(cut(V(g_yearly)$btw, breaks=fine)] 

(Ungeprüfte in Abwesenheit eines reproduzierbaren Beispiel.)

+0

Nun, das ist ein unglücklicher Tippfehler, aber ich denke, es ist nur in meinem Beitrag war. Egal, ich Double- überprüft und das gleiche Ergebnis. – tchaymore

+0

Es gibt Code, aber keine Daten an der Verbindung, die Sie ein "Beispiel" nennen. Es ist also nicht wirklich ... ein Beispiel. –

+0

Ich werde sehen, ob ich ein Stück Daten teilen kann. Es ist Teil eines gemeinsamen Forschungsprojekts, die Daten gehören mir, aber ich kann sie nicht vollständig teilen. – tchaymore

-1

In Fehler Zurückverfolgungs Sie Linie haben: 2-Palette (Palette). Ich denke, dass Sie Variable überschreiben, versuchen: blass < - colorRampPalette (c ('blau', 'grün'))

1

ich die gleichen Probleme hatten, aber das Problem gefunden. Wenn Sie

tun
palette <- colorRampPalette(c('blue','green')) 

neu definieren Sie die ‚Palette‘ Funktion, und so IGRAPH produziert später als Fehler (Ich gehe davon aus IGRAPH verwendet ‚Palette‘ in die eine oder andere Art und Weise.

Dies erklärt auch, warum der Fehler wenn

palette <- colorRampPalette(c('blue','green')) 

bleibt hat einmal geschehen.

+0

Relevant: https://github.com/igraph/rigraph/issues/252 – OganM