我有一个使用igraph制作的图表.我想分散节点.到目前为止我找到的唯一方法是缩放布局并强制绘图命令不重新缩放.
png("kmeansColouredNetwork.png", width=1200,height = 1000)
col=c("yellow", "saddlebrown", "brown1","chartreuse2", "chocolate1","darkorange" ,"deepskyblue1", "hotpink1","plum2")
for(i in 1:9){
V(graph)$cluster[which(V(graph)$name %in% kmeans[,i])]<-col[i]
}
V(graph)$color=V(graph)$cluster
coords <- layout.fruchterman.reingold(graph)*0.5
plot(graph, layout = coords, vertex.label=NA, rescale=FALSE, vertex.size=degree(graph)*.25,vertex.color=V(graph)$cluster)
labels = paste("cluster:", 1:length(colours))
legend("left",legend=labels, col=col, pch=16, title="K means clustered subgroups")
dev.off()
Run Code Online (Sandbox Code Playgroud)
如果我不重新缩放,中央高度连接的节点聚集在一起,我得到一个这样的图形,其中图形体内的模式无法辨别:

另一方面,如果我告诉plot命令不要重新缩放,那么我得到这个:

图案可辨别的地方,但图表的一半不在图中.这不是绘图大小的问题,就好像我增加了png的尺寸一样,它仍然将图形置于绘图边缘的中心.
这不是布局的问题 - 我尝试过fruchterman.reingold,layout_nicely,reingold.tilford,layout.circle,布局随机,同样的事情发生了.
显然曾经有一个变量来设置节点之间的排斥因子,但这似乎已被弃用.
如何将图表的节点展开或重新缩放并重新定位图?
小智 5
我刚刚在 StackOverflow 上找到了以下答案:
igraphaxesxlimylimplotwrong
基本上,你可以设置 ylim 和 xlim 和 asp。您可以设置要显示图表的哪一部分(与通常的 xlim 和 ylim 一样)以及两个轴是否相互依赖。
plot(g, rescale = FALSE, ylim=c(1,4),xlim=c(-17,24), asp = 0)
Run Code Online (Sandbox Code Playgroud)
选项 1:使顶点更小
node.size= c(10,10,10)
plot(net, vertex.size=node.size*0.25)
Run Code Online (Sandbox Code Playgroud)
选项 2(如果顶点之间的距离对您来说并不重要):
# Use the tkplot option to edit your graph in GUI
tkplot (net)
Run Code Online (Sandbox Code Playgroud)
注意:tkplot 将图形输出为 eps。如果您想进一步编辑它或将其导出为 pdf,我建议使用 inkscape(我将它用于所有图形编辑 - 只需在 RStudio 中将图形另存为 pdf 并在 inkscape 中编辑)。对于 eps 的情况,如果您使用的是 Windows 计算机,则需要调整 inkscape 才能打开此格式。一个非常简短的过程,详细信息 如下: