如何在点图中为自循环对称显示箭头

How to show arrows symmetrically for self-loops in a dot graph

我正在使用我在点文件格式中描述的 DFA。我的DFA中的一个节点有两个自循环,我最初是用下面的方式描述的

digraph {
  rankdir=LR;
  a -> a [color=blue]
  a -> a [color=green]
}

当我 运行 dot graph.gv -Tpng

时产生这个输出

出于对称原因,我希望在节点的相对两侧有蓝色和绿色箭头。我可以修改绿色箭头的headporttailport强制它从节点底部开始,如下所示:

digraph {
  rankdir=LR;
  a -> a [color=blue]
  a:sw -> a:se [color=green]
}

不幸的是,这会产生一个绝对不稳定的输出:

使两个箭头在节点上对称相对的正确方法是什么?

我怀疑你对边缘布局有很多控制。但是您可以试验 headport 属性值。这里有一些例子。

示例 1

digraph {
  rankdir=LR;

  a:n -> a [color=blue]
  a:s -> a [color=green headport=center]
}

View in editor

示例 2

digraph {
  rankdir=LR;

  a:ne -> a [color=blue]
  a:sw -> a [color=green headport=center]
}

View in editor


其他布局

您还可以尝试不同的布局。以下是 circo 布局的一些选项。

示例 3

digraph {
  rankdir=LR;
  layout="circo"

  a:n -> a:_ [color=blue headport=n]
  a:s -> a:_ [color=green headport=s dir=back]
}

View in editor

示例 4

digraph {
  rankdir=LR;
  layout="circo"

  a:nw -> a:w [color=blue headport=_]
  a:se -> a:e [color=green headport=_]
}

View in editor