graphviz的问题永远不会完成

时间:2013-04-11 17:01:56

标签: graphviz dot edges graph-drawing

有人可以帮我弄清楚为什么下面的图形永远不会生成点?我认为这个问题与头部和尾部有关。如果我把它们拿出去,它就可以工作,但理想情况下我希望那些因为风格原因而留下来。

digraph G {
    nodesep = 0.5;
    0 [width=0.75, height=0.75, fontsize=20];
    1 [width=0.75, height=0.75, fontsize=20, shape=square];
    2 [width=0.75, height=0.75, fontsize=20];
    3 [width=0.75, height=0.75, fontsize=20];
    4 [width=0.75, height=0.75, fontsize=20];
    5 [width=0.75, height=0.75, fontsize=20, shape=square];
    6 [width=0.75, height=0.75, fontsize=20];
    7 [width=0.75, height=0.75, fontsize=20, shape=square];
    8 [width=0.75, height=0.75, fontsize=20, shape=square];
    9 [width=0.75, height=0.75, fontsize=20, shape=square];
    10 [width=0.75, height=0.75, fontsize=20, shape=square];
    11 [width=0.75, height=0.75, fontsize=20, shape=square];
    12 [width=0.75, height=0.75, fontsize=20];
    subgraph directed{
            rankdir= LR;rank= max;
            0->1->2->3->4->5->6->7->8->9->10->11->12;
    }
    subgraph undirected{
            rankdir= LR;rank= min;edge[tailport=n,headport=n];
            0->1[dir=none, color=red];
            0->2[dir=none, color=red];
            1->9[dir=none, color=red];
            2->3[dir=none, color=red];
            2->8[dir=none, color=red];
            3->4[dir=none, color=red];
            4->8[dir=none, color=red];
            7->9[dir=none, color=red];
            8->9[dir=none, color=red];
            9->10[dir=none, color=red];
            9->11[dir=none, color=red];
            10->11[dir=none, color=red];
    }
}

2 个答案:

答案 0 :(得分:0)

很难知道你在追求什么。但是,图表存在一些问题:

  • 节点不能是多个子图的一部分 - 无论它们首先出现在哪里,它们都可以在图形或子图形中。你应该出现在哪里?
  • rankdir图形属性,无法应用于子图

修改

跟进你的评论,这是一个没有任何子图的版本。但是,你不喜欢边缘的路由,这是难以控制的。

我们的想法是将节点对齐成一条直线,然后用constraint=false添加其他边,以免影响节点的排名。

digraph G {
    nodesep = 0.5;
    node[width=0.75, height=0.75, fontsize=20];
    rankdir=LR;

    0;
    1 [shape=square];
    2;
    3;
    4;
    5 [shape=square];
    6;
    7 [shape=square];
    8 [shape=square];
    9 [shape=square];
    10 [shape=square];
    11 [shape=square];
    12;

    0->1->2->3->4->5->6->7->8->9->10->11->12;

    edge[constraint=false, tailport=n,headport=n,dir=none, color=red];
    0->1;
    0->2;
    1->9;
    2->3;
    2->8;
    3->4;
    4->8;
    7->9;
    8->9;
    9->10;
    9->11;
    10->11;
}

答案 1 :(得分:0)

不花费大量时间挖掘资源,很难说出原因,但你可以将第二个子图中的麻烦元素移出来解决问题:

从无向子图中删除1-> 9和2-> 8,并将其添加到其下方:

digraph G {
    nodesep = 0.5;
    0 [width=0.75, height=0.75, fontsize=20];
    1 [width=0.75, height=0.75, fontsize=20, shape=square];
    2 [width=0.75, height=0.75, fontsize=20];
    3 [width=0.75, height=0.75, fontsize=20];
    4 [width=0.75, height=0.75, fontsize=20];
    5 [width=0.75, height=0.75, fontsize=20, shape=square];
    6 [width=0.75, height=0.75, fontsize=20];
    7 [width=0.75, height=0.75, fontsize=20, shape=square];
    8 [width=0.75, height=0.75, fontsize=20, shape=square];
    9 [width=0.75, height=0.75, fontsize=20, shape=square];
    10 [width=0.75, height=0.75, fontsize=20, shape=square];
    11 [width=0.75, height=0.75, fontsize=20, shape=square];
    12 [width=0.75, height=0.75, fontsize=20];
    subgraph directed{
            rankdir= LR;rank= max;
            0->1->2->3->4->5->6->7->8->9->10->11->12;
    }
    subgraph undirected{
            rankdir= LR;rank= min;edge[tailport=n,headport=n];
            0->1[dir=none, color=red];
            0->2[dir=none, color=red];
            2->3[dir=none, color=red];
            3->4[dir=none, color=red];
            4->8[dir=none, color=red];
            7->9[dir=none, color=red];
            8->9[dir=none, color=red];
            9->10[dir=none, color=red];
            9->11[dir=none, color=red];
            10->11[dir=none, color=red];
    }
    1->9[dir="none", color="red", headport="n"];
    2->8[dir="none", color="red", headport="n"];
}