2016-03-29 6 views
0

Ich versuche, die Knotenfarben in einem bestimmten Diagramm zu ändern, aber der Befehl V(gsna)$color funktioniert nicht. Aus irgendeinem Grund kann ich Formen ändern, aber keine Farben. Insbesondere möchte ich die Farben der Knoten ändern, die jeden zusammenhängenden Block belegen. Die Standardfarben werden im Schwarzweißdruck nicht gut gelesen. Der Datensatz sna ist eine asymmetrische 2-Mode-Inzidenzmatrix. Hier ist ein Beispiel (in Wirklichkeit ist der Datensatz viel größer):Wie ändert man Knotenfarben von zusammenhängenden Blöcken?

 Attr1 Attr2 Attr3 Attr4 Attr5 
Subj1 1  0   0  1   1 
Subj2 1  0   0  1   1 
Subj3 1  0   1  0   1 
Subj4 1  0   0  1   1 
Subj5 0  1   0  0   0 
Subj6 0  1   1  0   0 

ich die cohesive.blocks verwendet() Befehl hierarchisch verschachtelte Blöcke zu erstellen. Themen werden durch Kreise dargestellt, Attribute werden durch Quadrate dargestellt. Hier ist mein Code:

library(igraph) 
as.matrix(sna) -> sna 

gsna <- graph.incidence(sna) 
bloc <- cohesive.blocks(gsna) 

par(mar=c(.05,.05,.05,.05),cex=.8) 
V(gsna)[V(gsna)$type == 1]$shape <- "square" 
V(gsna)[V(gsna)$type == 0]$shape <- "circle" 
plot(bloc,gsna,layout=layout.fruchterman.reingold,vertex.size=5,edge.color="gray40", 
vertex.label.color="black",mark.groups=blocks(bloc)) 

Ich habe auch versucht vcol <- colorRampPalette(c("red4","green","aliceblue")) und das Hinzufügen der vertex.color=vcol Option zu dem Grundstück() Funktion, aber das ändert nichts.

Antwort

0

Ich möchte Professor Ronald Breiger für die persönliche Beantwortung dieser Frage danken.

Die Lösung ist wie folgt:

group1 <- bloc$blocks[[1]] 
a <- V(gsna)[group1]$color <- rep("blue4", length(group1)) 
group2 <- bloc$blocks[[2]] 
b <- V(gsna)[group2]$color <- rep("deeppink", length(group2)) 
group3 <- bloc$blocks[[3]] 
c <- V(gsna)[group3]$color <- rep("greenyellow", length(group3)) 

plot(gsna,layout=layout.fruchterman.reingold,vertex.size=5,edge.color="gray40", 
vertex.label.color="black",vertex.color=V(gsna)$color,mark.groups=blocks(bloc)) 

rep() Der Befehl verwendet wird, eine bestimmte Farbe (z.B. blau) für jedes Element aus einem Block (z.B. Konzern1) zu replizieren. Achten Sie darauf, die Farbe für jeden Block und die Länge des Blocks anzugeben. Wenn Sie die Länge weglassen, werden nicht alle Knoten im Block farbig dargestellt.

Die Reihenfolge der Befehle ist in diesem Fall wichtig, da es hierarchische Cluster gibt. Farben sollten in der Reihenfolge vom größten (in diesem Fall Blöcke [[1]]) zum kleinsten (blcoks [[3]]) zugewiesen werden.

Im Plot-Befehl genügt die Eingabe V(gsna)$color.

Verwandte Themen