在 igraph 中绘制未连接的图
Plot unconnected graph in igraph
我有一个未连接的图表,我在 igraph
中使用 fruchterman-reingold
布局绘制
require(igraph)
er_graph <- erdos.renyi.game(100, 5/20)+erdos.renyi.game(100, 5/20)
coords<-layout.fruchterman.reingold(er_graph)
plot(er_graph,layout=coords, vertex.label=NA)
绘图示例:
结果是两个遥远的星团。
我希望减少情节中的白色区域。
有没有办法缩放坐标以减少簇之间的 space?
在其中一个布局函数中可能有一种简单的方法可以做到这一点,但您也可以在创建布局后直接更改节点坐标。如果您查看 coords
,您会发现它只是一个节点坐标矩阵。您可以使用集群标签以编程方式将两个节点集群靠得更近:
require(igraph)
require(dplyr)
er_graph <- erdos.renyi.game(100, 5/20)+erdos.renyi.game(100, 5/20)
# Make layout reproducible
set.seed(40)
coords <- layout.fruchterman.reingold(er_graph)
# Original graph
plot(er_graph,layout=coords, vertex.label=NA)
将聚类靠得更近:首先,我们将聚类标签添加到坐标中,并设置一个参数 f
来表示我们要消除的聚类之间距离的分数。然后我们从每个节点中减去 f
倍该集群的平均坐标与两个集群的平均坐标之间的差异。
# Add cluster labels to coords
coords = data.frame(coords, clust=clusters(er_graph)$membership)
# Move closer by a fraction "f" of mean distance between clusters
f = 0.6
# Shift each node closer to the overall center of mass of the node
coords = coords %>%
mutate(X1 = ifelse(clust==1, X1 - f*(mean(X1[clust==1]) - mean(X1)), X1 - f*(mean(X1[clust==2]) - mean(X1))),
X2 = ifelse(clust==1, X2 - f*(mean(X2[clust==1]) - mean(X2)), X2 - f*(mean(X2[clust==2]) - mean(X2))))
# Convert coords back to original matrix form
coords = as.matrix(coords[,1:2])
# Re-plot graph
plot(er_graph,layout=coords, vertex.label=NA)
我有一个未连接的图表,我在 igraph
fruchterman-reingold
布局绘制
require(igraph)
er_graph <- erdos.renyi.game(100, 5/20)+erdos.renyi.game(100, 5/20)
coords<-layout.fruchterman.reingold(er_graph)
plot(er_graph,layout=coords, vertex.label=NA)
绘图示例:
结果是两个遥远的星团。 我希望减少情节中的白色区域。 有没有办法缩放坐标以减少簇之间的 space?
在其中一个布局函数中可能有一种简单的方法可以做到这一点,但您也可以在创建布局后直接更改节点坐标。如果您查看 coords
,您会发现它只是一个节点坐标矩阵。您可以使用集群标签以编程方式将两个节点集群靠得更近:
require(igraph)
require(dplyr)
er_graph <- erdos.renyi.game(100, 5/20)+erdos.renyi.game(100, 5/20)
# Make layout reproducible
set.seed(40)
coords <- layout.fruchterman.reingold(er_graph)
# Original graph
plot(er_graph,layout=coords, vertex.label=NA)
将聚类靠得更近:首先,我们将聚类标签添加到坐标中,并设置一个参数 f
来表示我们要消除的聚类之间距离的分数。然后我们从每个节点中减去 f
倍该集群的平均坐标与两个集群的平均坐标之间的差异。
# Add cluster labels to coords
coords = data.frame(coords, clust=clusters(er_graph)$membership)
# Move closer by a fraction "f" of mean distance between clusters
f = 0.6
# Shift each node closer to the overall center of mass of the node
coords = coords %>%
mutate(X1 = ifelse(clust==1, X1 - f*(mean(X1[clust==1]) - mean(X1)), X1 - f*(mean(X1[clust==2]) - mean(X1))),
X2 = ifelse(clust==1, X2 - f*(mean(X2[clust==1]) - mean(X2)), X2 - f*(mean(X2[clust==2]) - mean(X2))))
# Convert coords back to original matrix form
coords = as.matrix(coords[,1:2])
# Re-plot graph
plot(er_graph,layout=coords, vertex.label=NA)