如何更改内聚块的节点颜色?

How to change node colors of cohesive blocks?

我正在尝试更改特定图表中的节点颜色,但 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")) 并向 plot() 函数添加 vertex.color=vcol 选项,但这并没有改变任何东西。

感谢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)的每个元素复制特定颜色(例如蓝色)。请务必指定每个块的颜色和块的长度。如果省略长度,它不会为块中的所有节点着色。

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

绘图命令中,输入V(gsna)$color即可。