如何更改内聚块的节点颜色?
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
即可。
我正在尝试更改特定图表中的节点颜色,但 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
即可。