在igraph中重新排列顶点

时间:2012-10-05 16:50:51

标签: r igraph

df

network  bus_unit   outage
A        Online     4
B        Internal   5
A        Finance    6
B        IT         5
A       IT         6
A       Marketing  40

我需要用这样的东西来增加一个igraph:

g <- graph.data.frame(df)
plot(g,  
     layout = layout.fruchterman.reingold,  
     vertex.label = V(g) $name,
     vertex.label.color= "black", 
     edge.arrow.size=1, 
     edge.curved=FALSE, 
     edge.label=df$outage)

我的问题是,我喜欢在图表上显示网络A,因为它是罪魁祸首。无论如何要组织这个igraph,移动顶点等等。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

当您将layout = layout.fruchterman.reingold传递给plot()时,您将为其提供构建布局的功能。但您也可以设置plot()布局并直接操作它 - 它是一个简单的坐标矩阵。

# Create an initial layout
bad.a.layout <- layout.fruchterman.reingold(g)

# ... it's really just a matrix of coordinates, with each row
# corresponding to a vertex
bad.a.layout
plot(g, layout = bad.a.layout)

# Tweak arbitrarily - e.g., bump Network A nodes up a bit on the y-axis
bad.a.layout[V(g)$network %in% "A", 2] <- bad.a.layout[V(g)$network %in% "A", 2] + 10
plot(g, layout = bad.a.layout)

当然,并不能保证实际上看起来不错。但这是修改布局以适合您的基本方法。如果是一次性项目,手动操作可能没问题。否则,你可能想要更深入地研究算法(这对我来说已经证明了一点兔子洞,但你可能会有更好的运气)。

旁注:我几乎总是在绘图功能之外设置我的布局,即使我不想操纵它们。即使是中等大小的图形,每次运行绘图时也可以节省大量时间来重新计算。