【问题标题】:How to make invisible nodes occupy space in graphviz?如何让不可见的节点占据graphviz中的空间?
【发布时间】:2015-08-12 14:28:12
【问题描述】:

我想使用 graphviz 绘制二叉树,并且节点的左子节点出现在右子节点的左侧(duh)很重要。如果没有左孩子,我希望左边有一个空白空间,以便在视觉上清楚地表明右孩子是右孩子。如果没有正确的孩子,我也想做同样的事情(右边应该有一个空格)。

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

A                     A
  \     instead of    |
    B                 B

我可以通过使用 ordering = "out" 确保 Graphviz 将左子元素放在右子元素之前,但如果没有左子元素,则右子元素可能会出现在其父元素的正下方。

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

【问题讨论】:

    标签: tree drawing binary-tree graphviz


    【解决方案1】:

    迟到总比没有好...

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

    graph Test 
    {
        node[ shape = plaintext ];
    
        C [ label = "C", style = invis ];
    
        A -- B;
        A -- C [ style = invis ]; 
    }
    

    一个很好的例子来证明 MWE 可以节省时间和精力......

    【讨论】:

    • 请注意,这仅在根据布局 B 已经在 A 的右侧对齐时才有效,即如果三个节点以三角形对齐。在这个最小的例子中就是这种情况,但在其他情况下,右孩子可能仍然正好在 A 之下,而 B 的兄弟可能在它的左边。所以让它不可见并没有帮助。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-13
      • 1970-01-01
      相关资源
      最近更新 更多