Graphviz从群集中删除节点

时间:2014-03-27 09:17:32

标签: graphviz dot

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

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

我真的很感激任何帮助我到处都看,似乎没什么用。

1 个答案:

答案 0 :(得分:0)

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

  

警告:MATH1034已经在排名集中,已从群集G中删除

     

警告: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];