Graphviz节点渲染

时间:2014-09-09 15:19:34

标签: graphviz

我有一个简单的graphviz图,如下图所示:

digraph G {
        "Model" -> "Task";
        "Task" -> "Worker 1" -> "Sink";
        "Task" -> "Worker 2" -> "Sink";
        "Task" -> "Worker 3" -> "Sink";
}       

enter image description here

在接收器和任务节点之间添加和边缘,图形输出如下图所示:

    "Sink" -> "Model";

enter image description here

如何添加此边缘并保持第一张图像中显示的原始对称节点布局?

1 个答案:

答案 0 :(得分:1)

(编辑改进我的原始答案)

根据How to control subgraphs' layout in dot?的答案,如果我们首先使用dot布置核心有向图,我们就可以使用neato添加额外的边缘。 neato允许使用-n参数固定已定义位置的节点,因此可以执行以下操作(其中symmetric.dot包含原始GraphViz有向图,并添加{{1} }):

graph [splines = true]

这个脚本:

  1. 使用#!/bin/bash dot -Tdot symmetric.dot >symmetric1.dot neato -n2 -Tpng symmetric1.dot -osymmetric1.png sed 's/^}/"Sink" -> "Model";}/' <symmetric1.dot >symmetric2.dot neato -n2 -Tdot symmetric2.dot >symmetric3.dot neato -n2 -Tpng symmetric3.dot -osymmetric3.png 将原始有向图布局为新的dot文件。
  2. 使用.dot绘制原始有向图。 neato -n2选项阻止-n2移动已有位置的节点。
  3. 使用neato插入sed边缘。
  4. 使用"Sink" -> "Model"布置新边(这是唯一没有定义neato -n2的边缘,因此唯一没有固定的边缘)并将其绘制为pos文件。< / LI>

    .png看起来像这样:

    enter image description here

    ... symmetric1.png附加边缘如下所示:

    enter image description here