25

在有向图中,如果存在循环,则 graphviz 会使该边非常短。

是否有一个参数可以让我改变循环边的长度,使图形看起来有点统一。

digraph ER {
  rankdir="LR";
  //orientation=landscape;
    node [shape=ellipse, fontsize=30];
  {node [label="Original"] old;}
  {node [label="Final"] new;}
  {node [label="Intermediate"] ir;}

old -> ir [label="suggest", fontsize=30];
ir -> ir [label="validate", fontsize=30, len=f];
ir -> new [label = "finalize", fontsize=30];
}

在此处输入图像描述

4

7 回答 7

12

编辑:对不起,我的回答会使边缘更长,但不是您需要的自引用边缘。

len在 dot 中不起作用,但minlen可以。

https://www.graphviz.org/doc/info/attrs.html#d:minlen

x->y
[minlen=5]
于 2019-04-01T06:39:44.373 回答
8

len在 dot 中不起作用,但你可以试试这个技巧:

digraph G {
rankdir=LR
a->b[dir=both]
b->c[dir=both,label="        "]// Just use the space to increase the edge length
}

如果rankdir=TB,使用label="\n"(根据需要重复\n)增加长度。

于 2016-02-25T07:12:34.147 回答
4

我发现以下属性“nodesep”可以用 sfdp 解决这个问题。

https://www.graphviz.org/doc/info/attrs.html#a:nodesep

对于除dot

nodeep 影响单个节点上循环之间的间距,或一对节点之间的多重边。

请注意,这是一个图形属性,因此图形中所有边的值都相同。

于 2013-09-13T00:02:10.963 回答
3

从点(1)开始:

len=f sets the optimal length of an edge.  The default is 1.0.
于 2012-07-01T16:27:09.360 回答
2

您可以通过在可见边缘之前添加一堆不可见的循环边缘来使循环边缘更长,如下所示:

digraph ER {
  rankdir="LR";
  //orientation=landscape;
    node [shape=ellipse, fontsize=30];
  {node [label="Original"] old;}
  {node [label="Final"] new;}
  {node [label="Intermediate"] ir;}

old -> ir [label="suggest", fontsize=30];
ir -> ir [style="invis"]
ir -> ir [style="invis"]
ir -> ir [style="invis"]
ir -> ir [style="invis"]
ir -> ir [label="validate", fontsize=30, len=f];
ir -> new [label = "finalize", fontsize=30];
}

OP的校正图

于 2018-09-22T20:18:20.810 回答
2

在 .dot 语言中,边缘连接具有不同等级的两个音符。边的长度等于(等级差)*ranksep

默认的ranksep(在图形属性中)为0.75英寸,因此相邻节点的边缘将为0.75英寸。

为了减少边长,你在图属性中将ranksep设置为一个较小的值

于 2021-04-26T19:01:35.737 回答
2

我现在使用另一种方法:

我使用graphviz以点格式输出文件

dot -T dot -Kneato -o ./positioned.dot ./input.dot

该文件将包含每条边的 Bezier 曲线定义。我手动更改点以按照我想要的方式绘制曲线。

起初这可能看起来有点令人生畏,但一旦你弄清楚它们是如何工作的,这并不难,我正在慢慢接近一个可以自动为我做这件事的脚本

然后使用您编辑的定位文件作为输入重新运行 dot

dot -T png -Kneato -O ./positioned.dot

通过这种方法,我几乎将 dot 变成了基于文本的 visio 替换

于 2021-10-13T06:03:43.730 回答