igraph 顶点间距离设置

3

我正在使用 igraph 来绘制网络,但似乎无法让节点(顶点)不重叠绘制。

我的代码:

g<-graph.empty(n=0, directed=FALSE)
nodes<-my_verts
edge<-my_intra_edges
freq<-nodes[,2]
max_freq<-sum(freq)
frequency<-freq*50/max_freq
colour1<-heat.colors(max_freq/2+2)
colour<-rev(colour1)
g<-igraph::add.vertices(g, length(nodes[,2]), name=as.character(nodes[,1]),     color=colour[freq/2+2])
names<-V(g)$name
ids<-1:length(names)
names(ids)<-names
from<-as.character(edge[,1])
to<-as.character(edge[,2])
edges<-matrix(c(ids[from], ids[to]), nc=2)
my_weight<-edge[,3]
g<-add.edges(g, t(edges), weight=my_weight)
V(g)$label<-V(g)$name
my_radius<-sqrt(my_verts[,2]/pi)
V(g)$size<-my_radius
V(g)$label.cex<-0.0001
del_ids<-intersect(which(degree(g)==0), which(freq==1))
g1<-delete.vertices(g, ids[del_ids])
length(del_ids)
jpeg(file="BC9.jpeg", height=7016, width=7016, res=600)
par(mfrow=c(1,1), mar=c(5,5,5,5))
title=c("BC9")
layout<-layout_with_graphopt(g1, niter=800)
plot(g1, layout=layout, edge.color="darkblue", main=title, edge.width=0.2)
dev.off()

目前,大多数节点被绘制为独立的点,但有些节点会重叠在一起。有没有办法让节点之间的间距更好呢?谢谢。


1
欢迎来到StackOverflow。如果您提供一个最小可重现的示例,那么您的问题更有可能引起关注。例如,您没有定义my_vertsmy_intra_edges,因此您的代码将无法直接运行。我建议您阅读这篇文章,以获取一些关于如何最好地提出问题的指导。 - jlhoward
3
这真是让人头疼。我试图在这里解决它,但你必须花费大量精力去调整参数,除非有其他用户提供更好的解决方案。 - SabDeM
2个回答

1
我和igraph一样也有这个问题,这些算法提供的布局似乎无法防止节点重叠。
可能会有人提出一个好的仅使用igraph的解决方案,但我的非常繁琐的当前解决方法是:我在Gephi上打开网络,然后使用Force Atlas 2算法并勾选“防止重叠”选项,我保存.gexf文件,然后稍后从文件中提取x、y、z坐标,然后将其用作igraph中的布局。

1
据我所知,图形的坐标已经重新缩放,但您可以使用rescale参数停止该操作并手动处理。您还可以使用norm_coords()将图形归一化到您拥有的边界范围内。虽然我不理解其中的所有细节,但这对我有效。
library(igraph)

g <- barabasi.game(100) # create a graph

lo <- layout_with_kk(g) # create a layout

lo <- norm_coords(lo, ymin=-1, ymax=1, xmin=-1, xmax=1)
# I think this tells igraph to normalize the coordinates of the 
# layout relative to the space you're working with

# see how it works
par(mfrow=c(1,2), mar=c(0,0,0,0))

plot(g, edge.arrow.width = .25,
     edge.arrow.size = .25,
     vertex.label = NA,
     vertex.size = 5, 
     rescale=FALSE, 
     layout=lo*0.25)
plot(g, edge.arrow.width = .25,
     edge.arrow.size = .25,
     vertex.label = NA,
     vertex.size = 5, 
     rescale=FALSE, 
     layout=lo*1)

这段内容是由reprex package (v0.3.0)创建于2020年9月10日。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接