【发布时间】:2015-05-29 15:17:53
【问题描述】:
我正在使用dot 命令生成一个图表,在本例中是一系列软件版本,显示版本之间的关系。
假设:
- 每个版本都有一个数字,数字越大表示后续版本。
- 每个版本必须高于图表中的早期版本。
- 每个版本都基于特定的早期版本,不一定是最新版本。
- 每个“基于”关系都显示为从一个节点到另一个节点的箭头。
- 出于对问题不重要的原因,某些版本的子集是独立的。我称它们为“alt”版本。 “Alt”版本可以基于非“alt”版本,反之亦然。 (碰巧我对非“alt”版本更感兴趣,但我想要图表中的所有版本。)
我可以生成一个图表,清楚地显示版本之间的关系,但我也想将所有“alt”版本放在垂直图的右侧,将所有非“alt”版本放在左侧side -- 同时保留所有关系信息(这意味着箭头从图表的左侧到右侧,反之亦然)。
我尝试将“alt”节点放入子图/集群中,但这会丢失集群中节点与其外部节点之间的依赖关系(箭头)。
我还尝试在“中间”创建一个不可见节点,并在指定方向的同时定义从每个节点到“中间”节点的依赖关系,但我无法在同一个图中混合垂直和水平依赖关系。
这是我目前拥有的demo.dot 文件,它没有 做我想要的分区:
digraph releases {
// Use a box shape for all nodes
node [shape=box];
// Define labels for nodes
v106 [style=bold];
v105 [label="v105 alt" style=dashed];
v104;
v103;
v102 [label="v102 alt" style=dashed];
v101 [style=bold];
// Define dependencies
v106 -> v104;
v106 -> v105 [style=dashed];
v105 -> v102;
v104 -> v101;
v103 -> v101;
v102 -> v101;
// Use [style=invisible dir=none] to ensure that a later node appears above
// an earlier one even if there's no dependency.
v106 -> v105 [style=invisible dir=none];
v105 -> v104 [style=invisible dir=none];
v104 -> v103 [style=invisible dir=none];
v103 -> v102 [style=invisible dir=none];
v102 -> v101 [style=invisible dir=none];
}
这是使用dot -Tpng demo.dot -o demo.png生成的图像文件
我想要的是让所有“alt”节点都在一条不可见的垂直线的右侧,而所有其他节点都在它的左侧,所有箭头仍然在原位(必要时扭曲)。
有没有办法用dot 做到这一点?或者是否有其他工具(可在 Linux 上使用,特别是 Debian)可以做同样的事情?
【问题讨论】: