简体   繁体   English

R igraph顶点间距

[英]R igraph vertex spacing

I'm using igraph to plot networks and can't seem to get nodes (vertices) not drawn over top of each other.我正在使用 igraph 来绘制网络,但似乎无法获得未绘制在彼此之上的节点(顶点)。

My code:我的代码:

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()

This currently will plot most nodes as independent points but some nodes get plotted on top of each other.目前,这会将大多数节点绘制为独立点,但有些节点会绘制在彼此之上。 Is there a way to get the nodes to have better spacing?有没有办法让节点有更好的间距? Thanks.谢谢。

I have the same problem with igraph, the layouts these algorithms provide don't seem to prevent overlap of nodes.我对 igraph 有同样的问题,这些算法提供的布局似乎不能防止节点重叠。

Someone will probably come up with a good igraph-only solution but my very tedious current workaround for this is: I open the network on Gephi, then I use Force Atlas 2 algorithm with the "prevent overlap" option checked, I save the.gexf file, then later I extract the x , y , z coordinates from the file, then I use it as the layout in igraph.有人可能会想出一个好的 igraph-only 解决方案,但我目前非常乏味的解决方法是:我在 Gephi 上打开网络,然后我使用 Force Atlas 2 算法并选中“防止重叠”选项,我保存 the.gexf文件,然后我从文件中提取xyz坐标,然后我将它用作 igraph 中的布局。

From what I understand, the coordinates for the plots are rescaled, but you can stop that with the rescale argument and do things manually.据我了解,绘图的坐标已重新缩放,但您可以使用rescale参数停止它并手动执行操作。 You can also use the norm_coords() to normalize the plot with the boundaries you have.您还可以使用norm_coords()使用您拥有的边界对图进行归一化。 I don't understand all the detail in this, but it works for me.我不明白其中的所有细节,但它对我有用。

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)

Created on 2020-09-10 by the reprex package (v0.3.0)reprex 包(v0.3.0) 创建于 2020-09-10

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM