我使用dot
命令生成一系列软件版本的图表,显示版本之间的关系。
假设:
我可以生成一个清楚地显示版本之间关系的图表,但我也希望将所有" alt"在垂直图的右侧发布,所有非 - " alt"在左侧发布 - 同时保留所有关系信息(这意味着箭头从图的左侧向右移动,反之亦然)。
我试过把" 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)可以做同样的事情?
答案 0 :(得分:2)
这是一个非常晚的答案,但可以帮助其他人。
如果两个节点都属于同一个group,则Graphviz会尝试保持边缘平直。
digraph releases { nodesep=0.5
// Use a box shape for all nodes
node [shape=box];
// Define regular nodes
{
node [group=regular];
v106 [style=bold];
v104;
v103;
v101 [style=bold];
}
// Define alt nodes
{
node [group=alt style=dashed];
v102 [label="v102 alt"];
v105 [label="v105 alt"];
}
// 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.
edge [style=invisible dir=none];
v106 -> v105;
v105 -> v104;
v104 -> v103;
v103 -> v102;
v102 -> v101;
}
给出
答案 1 :(得分:0)
尝试做类似的事情。将此代码添加到您的代码中:
subgraph cluster_alt {
graph [style= invisible];
edge [style = invisible, arrowhead=none];
weight = 10;
v102 -> v105;
}
subgraph cluster_main {
graph [style= invisible];
edge [style = invisible, arrowhead=none];
weight = 10;
v106 -> v105-> v104->v103->v102->v101;
}
给我:
“weight”属性将这些不可见子图中的边缘推向比其他边缘(您已定义的可见边缘)更垂直。