我正在尝试更改特定图表中的节点颜色,但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()函数中,但这并没有改变任何内容。
答案 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
就足够了。