点图语言-如何自动制作双向边线?


81

这是我的点图的非常简化的示例:

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

这创造了 替代文字

相反,我希望在A和B之间显示一条单边,但要有一个双箭头。我知道如何将双箭头作为全局选项:

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

但这看起来很丑陋,并不是我的所有优势都应该是双重的。

替代文字

如果我对图形进行更多处理并自己检测到双重引用,并用单个边替换两个边,则看起来不错。但我宁愿不必执行此额外步骤

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

替代文字

有更好的解决方案吗?

Answers:


65

'concentrate = true'怎么样?:

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

集中=真

文档中

如果为true,则使用边缘集中器。这会将多边合并为一条边,并导致部分平行的边共享其路径的一部分。后一个功能在点外尚不可用。


为我使用标签,并且我正在运行旧版本。
亚伦·霍尔

1
如果有帮助...对我来说不起作用,因为它可以合并边缘,但只能在末端放一个箭头。然后,我尝试“限制图”,然后它完美地工作了。
2015年

这很愚蠢,但这就是OP想要的,它是如此之大!
Dan Rosenstark

@philw对我也不起作用,我仅使用单个箭头获得边缘。我正在使用pygraphviz,并且尝试了pgv.AGraph(directed=True, strict=True),但是它也不起作用,我又得到了两个优势...有什么建议吗?
Tropilio

101

您应该只使用:

A -> B [dir=both]

4
这为我节省了一些多余的行,并且在适当时使用它以及最佳答案。
亚伦·霍尔

2
您不需要在“ both”和“ both”之间都
加上

@NoahSussman不能接受,因为它实际上没有回答问题;)
Dan Rosenstark
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.