如何让graphviz生成固定大小的子图?

时间:2012-11-12 12:45:42

标签: size graphviz dot subgraph

我一直在努力解决这个问题,但似乎无法找到答案。我正在使用graphviz中的复合子图,似乎无法找到正确的设置组合来强制两个子图彼此对齐。

附上一个显示问题的简单示例......

digraph g {
  compound=true;

  subgraph cluster_top {
    graph [color=black, label="Top", rank=min];

    nodeA; nodeB; nodeC
    cluster_top_DUMMY [shape=point style=invis]
  }

  subgraph cluster_service {
    graph [color=black, label="Bottom", rank=min];
    node1; node2; node3; node4; node5; extra_long_node
    cluster_bottom_DUMMY [shape=point style=invis]
  }
  cluster_top_DUMMY -> cluster_bottom_DUMMY [ style=invis ]
}

这会生成输出,Bottom子图比Top子图宽得多。

enter image description here

我真正想要的是确保顶部和底部的宽度始终完全相同。此外,如果有太多节点适合可用宽度,它将生成额外的节点行。

1 个答案:

答案 0 :(得分:2)

一种可能(糟糕但有效)的解决方案是使用不可见节点和设置宽度。 请考虑以下事项:

digraph g {
  compound=true;

    subgraph cluster_top {
      graph [color=black, label="Top", rank=min];

      nodeAI0 [style=invisible]
      nodeAI1 [style=invisible]
      nodeAI2 [style=invisible,fixedsize=true,width=1.65]
      nodeA; nodeB; nodeC
      cluster_top_DUMMY [shape=point style=invis]
    }

    subgraph cluster_service {
      graph [color=black, label="Bottom", rank=min];
      node1; node2; node3; node4; node5; extra_long_node
      cluster_bottom_DUMMY [shape=point style=invis]
    }
    cluster_top_DUMMY -> cluster_bottom_DUMMY [ style=invis ]
}

enter image description here

不可见节点(NodeAI0-NodeAI2)占用空间。 fixedsize = true,width = 1.65使最后一个精确到1.65英寸。

另一个更好的解决方案是通过添加以下内容来专门设置相关的较长节点(以避免必须查找正确的值):

  node [fixedsize=true,width=0.75]

在复合=真实部分之后。