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,移动顶点等等。
感谢您的帮助。
答案 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)
当然,并不能保证实际上看起来不错。但这是修改布局以适合您的基本方法。如果是一次性项目,手动操作可能没问题。否则,你可能想要更深入地研究算法(这对我来说已经证明了一点兔子洞,但你可能会有更好的运气)。
旁注:我几乎总是在绘图功能之外设置我的布局,即使我不想操纵它们。即使是中等大小的图形,每次运行绘图时也可以节省大量时间来重新计算。