点图语言 - 如何自动创建双向边?

98

这是一个非常简化的Dot图示例:

strict digraph graphName {
A->B
B->A
}

这将创建一个包含alt text的元素。

但我希望在A和B之间只显示一条边,但具有双箭头。我知道如何将双箭头作为全局选项获取:

strict digraph graphName {
  edge [dir="both"]
A->B
B->A
}

但那看起来非常丑,而且并不是我所有的边都应该是双向的。

alt text

如果我对图进行更多处理,并自己检测双重引用并将两个边替换为单个边,那么它看起来还不错。但我不想多做这一步。

strict digraph graphName {
A->B [dir="both"]
}

alt text

还有更好的解决方案吗?

2个回答

129

你应该只使用:

A -> B [dir=both]

4
这让我省去了一些重复的代码行,并在适当情况下使用它以及顶级答案。 - Russia Must Remove Putin
2
你不需要在“both”周围加引号。 - Yetti99
@NoahSussman它不能成为被接受的答案,因为它实际上没有回答问题 ;) - Dan Rosenstark

87

'concentrate=true' 怎么样?

strict digraph graphName {
concentrate=true
A->B
B->A
}

with concentrate=true

根据文档:

如果为 true,则使用边缩合器。这会将多重边合并成单个边,并导致部分平行边共享它们路径的一部分。后者特性目前仅在 dot 中可用。


对我来说,使用标签很有效,而且我正在运行较旧的版本。 - Russia Must Remove Putin
1
如果有帮助的话...这对我没有用,因为它只是将边缘合并,但只在末尾放了一个箭头。然后我尝试了“strict digraph”...然后它完美地工作了。 - philw
这很傻,但这是原帖作者想要的,所以大家支持一下! - Dan Rosenstark
@philw 我也无法使用它,我只得到了带有单个箭头的边缘。我正在使用pygraphviz,并尝试了 pgv.AGraph(directed=True, strict=True),但它也不起作用,我再次得到了两条边缘... 有什么建议吗? - Tropilio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接