Graphviz从集群中删除节点

Graphviz从集群中删除节点,graphviz,dot,Graphviz,Dot,我用点来编译。所以我在cluster0 MATH1036和MATH1034中有两个节点。当我尝试从MATH1034创建一条边到集群n1之外的节点时,它会崩溃并将MATH1034从集群0中删除 digraph G { labelloc="t"; label=""; graph [splines=spline, nodesep=1] compound=true; subgraph cluster0{ label="Math 1";

我用点来编译。所以我在cluster0 MATH1036和MATH1034中有两个节点。当我尝试从MATH1034创建一条边到集群n1之外的节点时,它会崩溃并将MATH1034从集群0中删除

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];

}
数学模块应该彼此相邻并放在一个盒子里

这是一个非常破碎的:

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

如果有任何帮助,我将不胜感激。我到处都找过了,但似乎没有任何效果。

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

警告:MATH1034已在rankset中,已从群集G中删除

警告:MATH1034->MATH2007:尾部不在尾部群集簇内0

警告:MATH1034->n1:尾部不在尾部群集内0

解决方案是从第二个簇中删除MATH1034,并在不约束列组的情况下添加边:

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