使用 graphviz 将节点固定到列中
Fixing nodes into columns using graphviz
我正在尝试使用 Graphviz 复制此图(该图是在 LaTeX 中生成的):
通过各种搜索和阅读,我已经走到了这一步:
我对获取超级订阅不感兴趣。如果我真的想的话,我很确定我能弄清楚那么多。我想要做的是确保节点都在 3 x 3 网格中,并且对齐得很好。如您所见,我的作品不一致。我的代码如下。 (该图是使用 DiagrammeR 包在 R 中制作的。
到目前为止,我已经尝试使用 [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')
您应该通过添加 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 以获取工作演示。
我意识到这是很多年后的事了,但是对于遇到这个问题的人来说,下面的代码基本上完成了@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]
}
我正在尝试使用 Graphviz 复制此图(该图是在 LaTeX 中生成的):
通过各种搜索和阅读,我已经走到了这一步:
我对获取超级订阅不感兴趣。如果我真的想的话,我很确定我能弄清楚那么多。我想要做的是确保节点都在 3 x 3 网格中,并且对齐得很好。如您所见,我的作品不一致。我的代码如下。 (该图是使用 DiagrammeR 包在 R 中制作的。
到目前为止,我已经尝试使用 [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')
您应该通过添加 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 以获取工作演示。
我意识到这是很多年后的事了,但是对于遇到这个问题的人来说,下面的代码基本上完成了@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]
}