使用Rgraphviz不能在简单的图表中保持线条交叉

时间:2014-10-06 18:30:33

标签: r graph

所以刚从Rgraphviz开始,出于某种原因,它在我真正简单的图表上划线。

A = matrix(c(0,0,0,0,1,
         1,0,0,0,0,
         1,0,0,0,0,
         1,0,0,0,0,
         0,1,1,1,0),
       ncol=5, byrow=TRUE)
rownames(A)=c(1,2,3,4,5)
colnames(A)=c(1,2,3,4,5)

library(Rgraphviz)
am.graph<-new("graphAM", adjMat=A, edgemode="directed")
am.graph
plot(am.graph, attrs = list(node = list(fillcolor = "lightblue"),
                            edge = list(arrowsize=0.5)))

enter image description here

感谢任何帮助

1 个答案:

答案 0 :(得分:3)

RGraphiviz提供了许多布局算法,请参阅?GraphvizLayouts。在您的示例中使用的默认值是“点”算法,它提供了分层布局。其中一个替代方案“twopi”将其中一个节点作为根,并将剩余节点排列在围绕此根的一系列同心圆中。这里可以使用第二种算法来避免图中的交叉线。

默认情况下,“twopi”使用节点1作为根:

plot(am.graph, "twopi", 
     attrs = list(node = list(fillcolor = "lightblue"),
         edge = list(arrowsize=0.5)))

5 node graph produces with "twopi" algorithm

但是,我们可以通过属性更改它(参见?GraphvizAttributes)以将节点2设置为根:

plot(am.graph, "twopi",
 attrs = list(graph = list(root = 2),
     node = list(fillcolor = "lightblue"),
     edge = list(arrowsize=0.5)))

这可能会使布局更接近您的期望:

enter image description here