【发布时间】:2018-01-25 01:59:58
【问题描述】:
我正在自动生成其节点需要位于固定位置的图形。例如:
实际上有一条从节点V4到节点V16的弧,但是我们没有看到它,因为也有从V4到V10和从V10到V16的弧。
请注意,节点和弧都是自动生成的,并且位置可能会有所不同,因此我需要一种自动方法来弯曲隐藏在其他弧后面的弧。
另请注意,这些解决方案均无效:igraph: Resolving tight overlapping nodes; Using igraph, how to force curvature when arrows point in opposite directions。第一个只是以某种方式放置de节点,但我的节点需要固定。第二个简单地处理一对节点,这些节点有两条弧线连接它们,方向相反。
更新:图的构造是使用 bnlearn 库形成Bayesian Network 的图的学习过程的结果,所以我不太确定如何生成可重现的示例。节点的位置是固定的,因为它们代表位置。我实际上需要一些魔法,某种重叠弧的检测:如果两条弧重叠,稍微弯曲其中一个,以便可以看到它。我从链接的问题中知道弯曲弧线是一种选择,所以我想也许可以实现这种魔法
【问题讨论】:
-
如果您提供带有示例输入数据的reproducible example,这样我们就可以运行和测试代码,这样会更容易提供帮助。还要清楚地描述所需的输出。你到底想在最终情节中发生什么(不仅仅是“魔法”)?
-
@MrFlick 图的构建实际上是使用 bnlearn 形成 Bayesian Network 的图的学习过程的结果,所以我不太确定如何生成可重现的示例。节点的位置是固定的,因为它们代表位置。我实际上需要一些魔法,某种重叠弧的检测:如果两条弧重叠,稍微弯曲其中一个,以便可以看到它。我从链接的问题中知道弯曲弧线是一种选择,所以我认为也许可以实现这种魔法。
-
我们不需要来自 bnlearn 的数据,只需要图表:例如
as.data.frame(get.edgelist(gr))和创建重叠边缘的布局。 -
@emilliman5,我不明白你的意思,节点和边都不总是相同的
-
如果你没有在 igraph 上设置.. 你可以使用 graphviz 来做到这一点(你可能在 bnlearn 加载它时拥有它)。通过一些文本操作,您可以使用neato 设置位置和渲染,(我认为(会弯曲边缘。