在igraph中,一种方法:
不包括孤立点X的邻接矩阵M,增加一行一列,建立X与M中任一点的关系,形成新的邻接矩阵M1。
用M1生成网络图对象G1,并生成这个网络图的layout比如说L1,但是不画图。
然后用原有的M,生成网络图对象G。
关键步骤来了,在plot(G)函数中,指定layout=L1这个参数,然后你会发现,那个孤立点也在里面。
参考代码如下:
- library(igraph)
- #生成邻接矩阵的自定义函数
- adjMFunc <- function (n) {
- m <- diag(0, n)
- m[lower.tri(m)] <-
- sample(3:0,
- length(m[lower.tri(m)]),
- replace = T)
- m[upper.tri(m)] <- m[lower.tri(m)]
- m[upper.tri(m)] <- t(m)[upper.tri(m)]
- m
- }
- #生成原矩阵
- M<-adjMFunc(6)
- #增加孤立点
- M1<-cbind(M,c(1,rep(0,5)))
- M1<-rbind(M1,c(1,rep(0,6)))
- #网络图
- G1 <- graph_from_adjacency_matrix(M1, mode = "undirected")
- L1 <- layout.graphopt(G1) #含有孤立点的layout
- G <- graph_from_adjacency_matrix(M, mode = "undirected") #不含孤立点的网络对象
- plot(G, layout=L1) #这个是结果
复制代码