如何改变粘性块的节点颜色?

时间:2016-03-29 21:34:31

标签: plot colors attributes nodes social-networking

我正在尝试更改特定图表中的节点颜色,但V(gsna)$color命令不起作用。出于某种原因,我可以改变形状,但不能改变颜色。具体来说,我想改变占据每个内聚块的节点的颜色。黑白打印时,默认颜色读取不佳。

数据集 sna 是一种双模非对称关联矩阵。这是一个例子(实际上,数据集要大得多):

       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选项添加到plot()函数中,但这并没有改变任何内容。

1 个答案:

答案 0 :(得分: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()命令用于为块的每个元素(例如,group1)复制特定颜色(例如,蓝色)。请务必指定每个块的颜色和块的长度。如果省略长度,它将不会为块中的所有节点着色。

在这种情况下,命令的顺序很重要,因为存在层次结构集群。颜色应按从最大(在这种情况下,块[[1]])到最小(blcoks [[3]])的顺序分配。

在plot命令中,输入V(gsna)$color就足够了。