1
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,移动顶点等等。

谢谢你的帮助。

4

1 回答 1

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)

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

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

于 2012-10-05T17:16:22.433 回答