【问题标题】:Fixing nodes into columns using graphviz使用 graphviz 将节点固定到列中
【发布时间】:2019-03-02 09:29:25
【问题描述】:

我正在尝试使用 Graphviz 复制此图(该图是在 LaTeX 中生成的):

进行各种搜索和阅读,我已经做到了这一点:

我对获取超级和下标不感兴趣。我敢肯定,如果我真的想的话,我能想出这么多。我想做的是确保节点都在 3 x 3 网格中,并且很好地对齐。如您所见,我的生产没有对齐。我的代码如下。 (该图是在 R 中使用 DiagrammeR 包制作的。

到目前为止,我已经尝试使用[pos='1,1!',pin=true],并将三个网格上的位置索引增加三个,但它根本没有改变结果。

有什么提示吗?

库(DiagrammeR)

grViz(
  "
digraph {

  graph [overlap = true, fontsize = 10]
    node [shape=circle] 
    Q11 [pos='1,1',pin=true]
    Q21 [pos='2,1',pin=true]
    Y1  [fillcolor=lightgray,style=filled,pos='3,1',pin=true]

    Q11 -> Q21
    Q11 -> Y1
    Q21 -> Y1

    node [shape = circle]
    Q12
    Q22
    Y2 [fillcolor=lightgray,style=filled]

    Q12 -> Q22
    Q12 -> Y2
    Q22 -> Y2

    node [shape = circle]
    Q13
    Q23
    Y3 [fillcolor=lightgray,style=filled]

    Q13 -> Q23
    Q13 -> Y3
    Q23 -> Y3


  {rank = same; Q11; Q12; Q13}
  Q11 -> Q12
  Q12 -> Q13

  {rank = same; Q21; Q22; Q23}
  Q21 -> Q22
  Q22 -> Q23
}
  ",
engine = 'neato')

【问题讨论】:

  • 您可以尝试不同的内边缘和外边缘的权重,例如` Q11 -> Q21 -> Y1 [weight=2]` 和Q11 -> Y1 [weight=1]。结果让你更接近你想去的地方。但最后,手工布置要容易得多。 ;)

标签: r graphviz diagrammer


【解决方案1】:

您应该通过添加constraint=false 属性来禁用边缘上的一些约束。

digraph {
    graph [fontsize=10]
    node [shape=circle] 
    Q21
    Q22
    Q23
    Q12
    Q11
    Q13

    Q21 -> Q22 [constraint=false]
    Q22 -> Q23 [constraint=false]

    Q11 -> Q21
    Q11 -> Y1 [constraint=false]
    Q21 -> Y1

    Q12 -> Q22
    Q12 -> Y2 [constraint=false]
    Q22 -> Y2


    Q13 -> Q23
    Q13 -> Y3 [constraint=false]
    Q23 -> Y3

    {rank = same; Q11; Q12; Q13;}
    Q11 -> Q12 [constraint=false]
    Q12 -> Q13 [constraint=false]

    {rank = same; Q21; Q22; Q23}
    Y3 [fillcolor=lightgray,style=filled]
    Y2 [fillcolor=lightgray,style=filled]
    Y1 [fillcolor=lightgray,style=filled]
}

此代码将生成下图。

请查看http://graphviz.it/#/LXfbjEui 以获得工作演示。

【讨论】:

  • 你,先生,让我很开心!谢谢!
【解决方案2】:

我意识到这是多年以后的事了,但是对于遇到这种情况的人来说,下面的代码基本上完成了@Marcin 的解决方案所做的事情。但是被简化了,也许可以更好地说明所采用的技术。

digraph {
    node [shape=circle]

    Q11 -> Q21 -> Y1
    Q12 -> Q22 -> Y2
    Q13 -> Q23 -> Y3

    edge [constraint=false]
    Q11 -> Q12 -> Q13
    Q21 -> Q22 -> Q23
    Q11 -> Y1
    Q12 -> Y2
    Q13 -> Y3
    Y1, Y2, Y3 [fillcolor=lightgray,style=filled]
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-05
    • 1970-01-01
    • 2016-02-06
    • 2015-10-14
    • 1970-01-01
    相关资源
    最近更新 更多