gpt4 book ai didi

r - 与另一个圆弧重叠时自动弯曲圆弧

转载 作者:行者123 更新时间:2023-12-04 12:13:43 27 4
gpt4 key购买 nike

我正在自动生成其节点需要处于固定位置的图。例如:

Graph with fixed nodes

实际上有一条从节点 V4 到节点 V16 的弧,但我们没有看到它,因为还有从 V4 到 V10 和从 V10 到 V16 的弧。

请注意,节点和弧线都是自动生成的,并且位置可能会有所不同,因此我需要一个 自动化 曲线隐藏在其他弧后面的弧的方法。

另请注意,这些解决方案均无效:igraph: Resolving tight overlapping nodes ; Using igraph, how to force curvature when arrows point in opposite directions .第一个只是以某种方式放置节点,但我的节点需要修复。第二个简单地处理成对的节点,这些节点有两个以相反方向连接它们的弧线。

更新:图的构建是图的学习过程的结果,该图形成了 Bayesian Network使用 bnlearn 库,所以我不太确定如何生成可重现的示例。节点的位置是固定的,因为它们代表位置。我实际上需要一些魔法,某种重叠弧的检测:如果两个弧重叠,稍微弯曲其中一个以便可以看到。我从链接的问题中知道弯曲弧线是一种选择,所以我想也许可以实现这种魔法

最佳答案

一种解决方案是使用 qgraph包裹。在下面的示例中,它会自动弯曲双向边:

library(igraph)
library(qgraph)

# the raster layout
layout <- cbind(1:3, rep(1:3, each = 3))
# fully connected network
adj <- matrix(1, 9, 9)

# plot directed and undirected network
layout(matrix(1:2, 1, 2))
qgraph(adj, layout = layout, directed = FALSE, title = "undirected")
qgraph(adj, layout = layout, directed = TRUE, title = "directed") # automatically curves the bidirectional arrows

enter image description here

转换 igraph反对 qgraph 可以使用的东西,您只需要一个边列表或邻接矩阵:
g <- make_ring(9)
edgeList <- do.call(rbind, igraph::get.adjedgelist(g))
qgraph(edgeList)

如果你还想包括轴,你可以使用 axis()因为 qgraph 使用基本图形。但是,您可能需要修改 par()以及让它看起来漂亮。

关于r - 与另一个圆弧重叠时自动弯曲圆弧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45721802/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com