【问题标题】:How can I get dot to draw connected subgraphs side by side?如何让点并排绘制连接的子图?
【发布时间】:2011-08-11 11:43:26
【问题描述】:

这是生成的图表当前的样子: 这是代码:

  digraph {
  rankdir=TB;
  subgraph cluster01 {
    label="1.fázis"

    aSTART;
    node [shape = doublecircle]; a001; 
    node [shape = ellipse];

    aSTART -> a0 [ penwidth = 3 label = "0" ];
    a0 -> a00 [ penwidth = 3 label = "0" ];  
    a00 -> a001 [ penwidth = 3 label = "1" ];


    a0 -> aSTART [ label = "1" ];  
    a00 -> a00 [ label = "0" ];  
    a001 -> a0 [ label = "0"];
    a001 -> aSTART [ label = "1"];
    aSTART -> aSTART [ label = "1"];  
  }
  subgraph cluster02
  {
  label="2.fázis"
  bSTART; b1; b11;
  node [shape = doublecircle]; b111;
  node [shape = ellipse];

  bSTART -> b1 [ penwidth = 3 label = "1" ];
  b1 -> b11 [ penwidth = 3 label = "1" ];  
  b11 -> b111 [ penwidth = 3 label = "1" ];

  b1 -> bSTART [ label = "0" ];  
  b11 -> bSTART [ label = "0" ];  
  b111 -> bSTART [ label = "0"];
  bSTART -> bSTART [ label = "0"];

  b111 -> b111 [label = "1"];
  }

  subgraph cluster03
  {
  label="3.fázis";  

    cSTART; c0; c1; c01; c10;
    node [shape = doublecircle]; c010; c100;
    node [shape = ellipse];

    cSTART -> c0 [ penwidth = 3 label = "0" ];
    c0 -> c01 [ label = "1" ];  
    c01 -> c010 [ penwidth = 3 label = "0" ];

    cSTART -> c1 [ label = "1" ];  
    c1 -> c10 [ penwidth = 3 label = "0" ];    
    c10 -> c100 [ label = "0" ];    

    c0 -> c1 [ penwidth = 3 label = "1" ];
    c01 -> c1 [ label = "1" ];
    c1 -> c1 [label = "1"];

    c10 -> c01 [ penwidth = 3 label = "1"];

    c010 -> c100 [penwidth = 3 label = "0"];
    c010 -> c01 [label = "1"];

    c100 -> c01 [label = "1"];
    c100 -> c0 [label = "0"];

  }

  a001 -> b1 [color = "red" style = "dashed"];
  b111 -> c1 [color = "red" style = "dashed"];
}

如果我删除 2 条红线,它会按照我想要的方式排列:

我怎样才能让它像这样排列并且同时有两条红线?

【问题讨论】:

    标签: graphviz dot directed-graph subgraph


    【解决方案1】:

    你可以添加

    {
       rank=same;
       aSTART;
       bSTART
       cSTART;
    }
    

    在您的子图 cluster03 之后。 Dot 会给你一个警告,但会按照你想要的方式绘制:

    D:\Code\funfunfun>dot -Tpng -oso1.png -Gcharset=latin1 so1.dot
    Warning: aSTART was already in a rankset, ignored in cluster _anonymous_0
    Warning: bSTART was already in a rankset, ignored in cluster _anonymous_0
    Warning: cSTART was already in a rankset, ignored in cluster _anonymous_0
    

    补丁图可用here

    【讨论】:

    • 太棒了!但是为什么我们必须把它放在最后而不是放在开头呢?
    • 不知道,前段时间我也遇到过同样的问题,我用实验的方法解决了,所以我不能保证长期的结果:)
    【解决方案2】:

    您应该在两条红色边上使用constraint=false 属性。

    如果为 false,则不使用边对节点进行排序。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-24
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多