用igraph创建的图的颜色节点与该节点的特征向量中心成比例

rn0zuynd  于 2023-09-27  发布在  其他
关注(0)|答案(1)|浏览(83)

我正在使用R中的igraph库。我使用函数mst基于存储在名为tree的 Dataframe 中的距离函数创建了一个MST图:

gf <- graph_from_data_frame(tree, directed = FALSE)
mstgf <- mst(gf, weights = tree$distance)

我已经计算了MST中每个节点的特征向量中心度:

ec <- eigen_centrality(mstgf, directed=T, weights=NA)$vector

然后,我将特征向量中心的向量加入data.frame树:

x <- cbind(names(ec), as.numeric(ec)) %>% as_tibble() %>% mutate(V2 = as.numeric(V2)) %>% 
        rename(from = V1) 
        
tree <- tree %>% inner_join(.,x, by = "from")

我想做的是绘制MST,通过对节点着色,以类似于它们的特征向量中心性。我正在使用下面的绘图,但我不知道如何更改参数vertex.color以获得类似于下图的内容?

plot.igraph(mstgf,
                vertex.color =  round(tree$V2,0),   
                edge.color = "blue", 
                edge.curved = TRUE,  
                edge.witdh = 1,      
    )

c2e8gylq

c2e8gylq1#

一旦你计算了你选择的中心,你想1)将值缩放到一个有意义的分类范围(如1,2,3,4,5),2)将你的中心类别与渐变中的颜色相关联。你不必在igraph之外继续连接和计算。
这是一个随机网络

# Random network
g <- erdos.renyi.game(100,250,'gnm', directed=F)

1)制作分类

这迫使每个特征向量中心性假设为1到10之间的整数值

# Calculate eigen centrality and check the distribution We're attaching the
# result of eigen_centrality() straight onto the vertices as verticy-attributes
V(g)$ec <- eigen_centrality(g, directed=T, weights=NA)$vector
hist(V(g)$ec)

# You could use the scales package, or define this normalisation function:
normalize <- function(x){(x-min(x))/(max(x)-min(x))}
(V(g)$ec_index <- round(normalize(V(g)$ec) * 9) + 1)
#ec_index should now be a category between 1 and 10 for your centralities

你可以使用任何你喜欢的分辨率。

2)附上索引中的颜色

有几个包和方法可以在R中加载颜色范围(colorspace,colorRamps,RColorBrewer等)。

# Build a color-mapping with 10 categories and set the color of each
# node to the corresponding color of each centrality-measure category
V(g)$color <- colorRampPalette(c("turquoise", "yellow","red"))(10)[V(g)$ec_index]

# Look at what we did
table(V(g)$color)
plot(g, vertex.label=NA, vertex.size=5)

这个例子应该会产生一些沿着于这个图的东西:

相关问题