【问题标题】:Force two nodes to occupy the same rank in Graphviz?强制两个节点在 Graphviz 中占据相同的排名?
【发布时间】:2011-09-23 07:59:38
【问题描述】:

使用 ruby​​-graphviz,我创建了一个看起来像这样的图形(添加边框以强调渲染边界):

我真正想要的是让 A 和 K 在顶部(或左侧,如果 rankdir="LR")排列在一起。所以我添加了一个不可见节点(称为 X),并添加了从 X 到 A 和 K 的不可见边。这就是我得到的:

X、XA 和 XK 没有标签,并且样式设置为“invis”。 X 的高度、宽度和边距设置为 0,固定大小设置为 true。 XA 和 XK 将 minlen、len 和 penwidth 设置为 0。

但是顶部仍然有那个空白区域。除了事后裁剪,有什么办法可以摆脱它?

【问题讨论】:

    标签: graphviz


    【解决方案1】:

    您不需要不可见的节点来实现这一点。

    这是强制两个节点排名相同的点语法:

    {rank=same; A; K;}
    

    这称为subgraph

    我不知道 ruby​​-graphviz,我不确定如何创建子图 - 但有一个 example on github:

    c2 = g.subgraph { |c|
      c[:rank => "same"]
      c.mysite[:label => "\nexample.com\n ", :shape => "component", :fontname => "Arial"]
      c.dotgraph[:label => "\ndotgraph.net\n ", :shape => "component", :fontname => "Arial"]
    }
    

    【讨论】:

    • 为了使上述解决方案发挥作用,需要进行一些额外的争论,但结果证明子图是关键。谢谢!
    • 一个很好的例子,解决了 OP 的问题而不回答他的问题。我有“如何防止不可见节点占用空间”的问题...... ;-)
    • @DevSolar ... 或解决初始问题的错误问题示例 :-) 但是,恕我直言,大多数情况下,最好不要使用不可见节点,如果存在其他解决方案。但是请继续发布有关您的特定问题的问题,有人可能会找到解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-27
    • 2012-10-15
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    相关资源
    最近更新 更多