试图在graphviz中创建排名子图

时间:2016-10-26 20:02:35

标签: graphviz

我尝试使用Graphviz制作类似的东西:

    x   y   z
    |   |   |
    #   |   |
   a#__\|   |
    #  /#b  |
    #   #__\|
    #   #  /#c
    #  d#/__#
    #   #\  x
    #   #   |
   e#/__#   |
    #\  #   |

但排名似乎并没有像我预期的那样发挥作用。我希望e低于所有其他节点。

digraph x
{
  rankdir = tb;
  size = "7.5, 7.5";
  rank = source;
  a -> b -> c -> d -> e;
  subgraph "cluster x"
  {
    style=filled;
    color=lightgrey;
    label="x";
    a -> e [style=invis];
  }
  subgraph "cluster y"
  {
    label="y";
    b -> d [style=invis];
  }
  subgraph "cluster z"
  {
    label="z";
    c;
  }
}

First attempt

我尝试使用clusterrank = global哪种作品,但子图不会分成更明显的列,并且列上有重叠。它也没有像我想的那样走向正确。下图突出显示其中一个红色重叠,但正如您所见,有4个。

2nd attempt

digraph x
{
  rankdir = tb;
  rankstep=equally;
  clusterrank = global;
  size = "7.5, 7.5";
  a -> b -> c -> d -> e;
  subgraph "cluster x"
  {
    style=filled;
    color=lightgrey;
    label="x";
    a -> e [style=invis];
  }
  subgraph "cluster y"
  {
    label="y";
    b -> d [style=invis];
  }
  subgraph "cluster z"
  {
    label="z";
    c;
  }
}

我尝试制作一个单独的群集,该群集将保证从上到下的排名,然后将相应的群集排在一起,但它与之前的尝试相同,删除了第一个看到的框尝试并导致不必要的重叠。

digraph x
{
  rankdir = tb;
  1 -> 2 -> 3 -> 4 -> 5;
  a -> b -> c -> d -> e;
  { rank=same; 1; a; }
  { rank=same; 2; b; }
  { rank=same; 3; c; }
  { rank=same; 4; d; }
  { rank=same; 5; e; }

  subgraph "cluster x"
  {
    style=filled;
    color=lightgrey;
    label="x";
    a -> e [style=invis];
  }
  subgraph "cluster y"
  {
    label="y";
    b -> d [style=invis];
  }
  subgraph "cluster z"
  {
    label="z";
    c;
  }
}

3rd attempt

任何人都有任何想法尝试获得我想要的布局吗?

作为旁注,我尝试登录Graphviz论坛,但是发现从this page登录似乎不起作用。我一直有一个很长的超时问题。我检查了我的电子邮件帐户,没有任何内容。我尝试使用相同的电子邮件创建一个新帐户,并说该帐户已在使用中。然后我尝试让他们重置密码,我又遇到了一个超时问题。

有谁知道我可以联系谁来尝试解决这个烦人的登录问题?也许已登录的人可以为我发帖吗?

2 个答案:

答案 0 :(得分:0)

使用-Gnewrank运行dot。那将根据你的草图得到你想要的东西。如果需要进行更多调整,请说明您的目标。

答案 1 :(得分:0)

您的最后一个解决方案将在您进行微调后立即生效

使用newrank=true避免“取消装箱”群集

使用splines=...进行游戏以调整箭头

将标签定义为单独的节点。

digraph x
{
  rankdir = tb;
  newrank=true;
  splines=ortho;

  0 -> 1 -> 2 -> 3 -> 4 -> 5;
  X; Y; Z;
  a -> b -> c -> d -> e;
  { rank=same; 0 X Y Z}
  { rank=same; 1; a; }
  { rank=same; 2; b; }
  { rank=same; 3; c; }
  { rank=same; 4; d; }
  { rank=same; 5; e; }

  subgraph "cluster x"
  {
    style=filled;
    color=lightgrey;
    a -> e [style=invis];
  }
  subgraph "cluster y"
  {
    b -> d [style=invis];
  }
  subgraph "cluster z"
  {
    c;
  }
}

enter image description here