gpt4 book ai didi

graphviz - 水平划分图中的节点

转载 作者:行者123 更新时间:2023-12-02 01:49:27 25 4
gpt4 key购买 nike

我正在使用 dot 命令生成图表,在本例中,是一系列软件版本,显示版本之间的关系。

假设:

  • 每个版本都有一个编号,编号越大表示版本越晚。
  • 每个版本都必须出现在图表中的上方之前的版本。
  • 每个版本都基于特定的早期版本,不一定是最新版本。
  • 每个“基于”关系都显示为从一个节点到另一个节点的箭头。
  • 由于对问题不重要的原因,部分版本是分开的。我将它们称为“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 生成的图像文件

demo.png

我想要的是让所有“alt”节点都在一条不可见的垂直线的右侧,所有其他节点都在它的左侧,所有箭头仍然在原位(必要时扭曲)。

有没有办法用来做到这一点?或者是否有其他工具(可在 Linux 上使用,特别是 Debian)可以做同样的事情?

最佳答案

这是一个很晚的答案,但可能对其他人有帮助。

如果两个节点都属于同一个 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;

}

给予

enter image description here

关于graphviz - 水平划分图中的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23794051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com