如何让不可见的节点在graphviz中占据space?

How to make invisible nodes occupy space in graphviz?

我想使用 graphviz 绘制二叉树,重要的是节点的左侧 child 出现在右侧 child 的左侧 (duh)。如果没有左边的child,我想要一个左边空的space,视觉上清楚右边的child就是右边的child。如果没有右边的child我也想这样做(右边应该是空的space)。

例如,我想要这样的东西:

A                     A
  \     instead of    |
    B                 B

我可以通过使用 ordering = "out" 确保 Graphviz 将左边 child 放在右边之前,但是如果没有左边 child,那么右边 [=22] =] 可能会出现在 parent 的正下方。

如果我在缺少 child 的地方添加虚拟节点,我会得到正确的布局,但虚拟节点会出现在图片上(我不想要它们)。我尝试将 style = "invis" 用于连接到它们的虚拟节点和边缘,但是对于 graphviz 来说,它们就好像不存在一样。我怎样才能解决这个问题?

迟到总比不到好...

您可能将虚拟节点留空了 ("")。如果你给它一个合理大小的标签,它工作正常:

graph Test 
{
    node[ shape = plaintext ];

    C [ label = "C", style = invis ];

    A -- B;
    A -- C [ style = invis ]; 
}

证明 MWE 节省时间和精力的好例子...

如果你使用两个填充的不可见节点会更好,所以你想看到的节点肯定会留在旁边,而不是直接在它的祖先下面。