2016-03-29 30 views
0

我試圖更改特定圖形中的節點顏色,但V(gsna)$color命令不起作用。出於某種原因,我可以改變形狀,但不是顏色。具體來說,我想改變佔用每個粘性塊的節點的顏色。黑白打印的默認顏色讀數不好。如何更改粘合塊的節點顏色?

數據集sna是一個2模式非對稱關聯矩陣。下面是一個例子(在現實中,數據集要大的多):

 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 

我用cohesive.blocks()命令創建分級嵌套塊。主題由圓圈表示,屬性用正方形表示。 這裏是我的代碼:

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)) 

我也使用vcol <- colorRampPalette(c("red4","green","aliceblue"))並添加vertex.color=vcol選項情節()函數嘗試過,但是這並不能改變什麼。

回答

0

我想感謝Ronald Breiger教授親自回答這個問題。

的解決方案如下:

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()命令用於複製的塊(例如,組1)的每個元件的特定顏色(例如,藍色)。務必指定每個塊的顏色和塊的長度。如果不填寫長度,則不會爲塊中的所有節點着色。

在這種情況下,命令的順序很重要,因爲有層次聚類。顏色應從最大(在這種情況下,塊[[1]])到最小(blcoks [[3]])的順序進行分配。

在繪圖命令中,輸入V(gsna)$color就足夠了。