r - 在 igraph 中绘制未连接的图

标签 r plot igraph

我有一个未连接的图,我用 fruchterman-reingold 绘制了它布局在 igraph

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)

情节示例:
plot example

结果是两个遥远的集群。
我希望减少我的情节中的白色区域。
有没有办法缩放坐标以减少集群之间的空间?

最佳答案

在其中一个布局函数中可能有一种简单的方法可以做到这一点,但您也可以在创建布局后直接更改节点坐标。如果你看 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)

enter image description here

将集群靠得更近:首先,我们将集群标签添加到坐标并设置参数 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)

enter image description here

关于r - 在 igraph 中绘制未连接的图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38564676/

相关文章:

正则表达式:匹配多个模式并获得字符串中间

python - 如何使用归一化互信息评估 python 中 igraph 的重叠社区

c++ - C/C++图库按属性查询节点

python - 将 igraph 转换为 networkx 以进行聚类

r - 将多个模型的回归系数打印到共享数据框

R稀疏逻辑矩阵符号

r - 使用表达式命令将两个向量粘贴在一起

r - 在点图中绘制误差条线的垂直结尾

python - 在新窗口而不是内联显示图(以前的帖子没有回答)

python - 将 Hover 从列表添加到 Bokeh 热图