2014-03-27 116 views
0

我正在使用dot进行编译。所以我在cluster0中有两个节点(MATH1036和MATH1034)。当我尝试从MATH1034到群集外部的节点(n1)创建边缘时,它会吓坏并从群集0中删除MATH1034。Graphviz从集群中删除节点

digraph G { 
    labelloc="t"; 
    label=""; 
    graph [splines=spline, nodesep=1] 
    compound=true; 

    subgraph cluster0{ 
     label="Math 1"; 
     MATH1034[label="MATH1034\nAlgebra"]; 
     MATH1036[label="MATH1036\nCalculus"]; 
     {rank=same;MATH1036->MATH1034;} 
    } 
    COMS1015[label="COMS1015\nBCO"]; 
    COMS1017[label="COMS1017\nALG"]; 
    COMS1016[label="COMS1016\nDCS"]; 
    COMS1018[label="COMS1018\nADS"]; 

    subgraph cluster1{ 
     label="Math 2"; 
     MATH2007[label="MATH2007\nMC"]; 
     MATH2018[label="MATH2018\nGT"]; 
     MATH2019[label="MATH2019\nLA"]; 
     STAT2XXX[label="STAT2XXX\nIntro to MS\nor\nSTAT1003\nStats 1"]; 
    } 
    COMS2003[label="COMS2003\nAAA"]; 
    COMS2XXX[label="COMS2XXX\nMC"]; 
    COMS2002[label="COMS2002\nDBF"]; 
    COMS2001[label="COMS2001\nOS"]; 

    COMS3000[label="COMS3000\nAAI"]; 
    COMS3003[label="COMS3003\nFLA"]; 
    COMS3004[label="COMS3004\nAN"]; 
    COMS3002[label="COMS3002\nSE"]; 

    // This line will hide the formatting nodes. 
    //node[shape=none,width=0,height=0, label=""]; 

    // THIS NEXT LINE CAUSES THE PROBLEM 
    // If I remove MATH1034 from this line, things go normal. 
    {rank=same;MATH1034->n1[ltail=cluster0,dir=none ]; n1->n2->n3->n4->n5[dir=none];} 

    n1->COMS1015[style=dotted]; 
    n2->COMS1016[style=dotted]; 
    n4->COMS1017[style=dotted]; 
    n5->COMS1018[style=dotted]; 

    MATH1034 -> MATH2007[lhead=cluster1, ltail=cluster0]; 
    MATH2018 -> STAT2XXX[style=invis]; 
    MATH2007 -> MATH2019[style=invis]; 

    //edge[dir=none]; 
    n3->n6->n7[arrowhead=none]; 
    {rank=same; COMS1016->n6->COMS1017[style=invis];} 
    {rank=same; COMS2001->n7[style=invis]; n7->COMS2003;} 

    COMS1015 -> COMS2001; 
    //{rank=same; COMS1017 -> p1 -> COMS1018;} 
    //p1 -> COMS2003; 
    //p1 -> COMS2XXX; 
    COMS1017 -> COMS2XXX; 
    COMS1017 -> COMS2001; 
    COMS1017 -> COMS2003; 

    COMS1018 -> COMS2003; 
    COMS1018 -> COMS2XXX; 
    COMS1018 -> COMS2002; 

    COMS1016 -> COMS2003; 
    COMS1016 -> COMS2001[weight=100,style=invis]; 

    MATH2007 -> COMS2001[ltail=cluster1,style=dotted] 
    MATH2007 -> COMS2003[ltail=cluster1,style=dotted] 


    {rank=same;COMS2XXX -> COMS2002[dir=back, style=dotted]} 
    {rank=same;COMS2003 -> COMS2XXX[dir=back]} 

subgraph cluster5{ 
    label=""; 
    {rank=same;COMS3004 -> COMS3003 -> COMS3000 -> COMS3002[style=invis];} 
} 
    COMS2003 -> COMS3000[weight=1000]; 
    COMS1016 -> COMS3003; 

    COMS2001 -> COMS3004[weight=1000]; 
    COMS2002 -> COMS3002[weight=1000]; 

    MATH2007 -> COMS3004[ltail=cluster1,lhead=cluster5]; 

} 

MATH模块应该彼此相邻,放在一个盒子里。

这里是很破一个:

broken layout

这里是正确的布局,但没有MATH1034和N1之间的边缘:

correct layout

任何帮助将真正理解我到处寻找,似乎没有任何工作。

回答

0

节点Math1034在两个不同的子图中是不允许的。 dot实际上发出以下警告:

警告:MATH1034已经在一个rankset,从簇ģ

警告删除:MATH1034 - > MATH2007:尾巴不内尾簇cluster0

警告:MATH1034 - > N1:尾巴不内尾簇cluster0


的解决方案是从除去MATH1034第二个集群,并添加没有约束排序的边缘:

{rank=same; n1[ltail=cluster0,dir=none ]; n1->n2->n3->n4->n5[dir=none];} 
MATH1034 -> n1[constraint=false];