R:如何在 igraph 中改变颜色和形状

R: How to change colors and shapes in igraph

我正在尝试使用如下示例数据创建一个网络,但要大得多

data <- structure(list(V1 = structure(c(1L, 1L, 1L, 1L, 5L, 5L, 6L, 2L, 
4L, 4L, 3L, 7L), .Label = c("A", "AB", "AD", "AN", "B", "D", 
"GDH"), class = "factor"), V2 = structure(c(4L, 5L, 6L, 5L, 6L, 
5L, 5L, 1L, 2L, 3L, 3L, 7L), .Label = c("AC", "AD", "AG", "B", 
"C", "D", "THG"), class = "factor")), .Names = c("V1", "V2"), class = "data.frame", row.names = c(NA, 
-12L))


library(igraph)
g = graph.data.frame(data)
plot(g)

这给了我这个

我想要的是 1- 改变每个簇的颜色和形状(比如 THG 和 GDH 变成蓝色)但更喜欢随机,因为当数据很大时,一个一个地应用它是不合适的

2- 删除里面的名字,而是根据他们在数据中的顺序放一个数字,例如

A   B
A   C
A   D
A   C
B   D
B   C
D   C

是 1

AB  AC

是2

等等等等

这是 90% 的解决方案。除了组件标签外,它可以做任何你想做的事情。

我认为您正在尝试做的是获取图形的连接组件。这可以通过 {igraph} 中的 biconnected_components 函数获得。我用它来构建一个向量,指示每个顶点所在的组件。您可以使用 vertex.xxx 参数组修改顶点。下面,我使用组件编号更改颜色、形状和标签。

(已更新以包含形状)

Components = biconnected_components(g)$components
VComponent = rep(0, length(V(g)))
for(i in 1:length(Components)) { VComponent[Components[[i]]] = i }
plot(g, vertex.color=VComponent, vertex.label=VComponent,
vertex.shape = shapes()[c(1:3,8)][VComponent])

默认形状不允许有太多变化,但可以添加其他形状。 This page 展示了如何添加三角形和星形作为选项。我用簇号标记顶点。您可以通过指定 vertex.label = NA 使顶点没有标签。但是您想在每个组件附近放置一个文本标签。我不知道如何获取组件的位置来放置文本,所以我标记了节点。