2014-10-06 45 views
1

因此,刚开始使用Rgraphviz并出于某种原因,它会在我真正简单的图上穿过线条。使用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

任何帮助表示赞赏

回答

2

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

+0

感谢,似乎做我想要的。 – Dalupus 2014-10-15 14:33:26