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

15
我已经苦恼了一段时间,但似乎找不到一个明确的答案。我正在使用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 ]
}

这将生成底部子图明显比顶部子图宽的输出。

enter image description here

我真正想要的是确保顶部和底部始终具有完全相同的宽度。此外,如果有太多节点无法适应可用宽度,则会生成其他行节点。

1个回答

4
一种可能的(不好但可行的)解决方案是使用无形节点并设置宽度。 考虑以下内容:
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]

在compound=true部分之后。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接