我自动生成其节点需要处于固定位置的图形.例如:
实际上存在从节点V4到节点V16的弧,但是我们没有看到它,因为还存在从V4到V10以及从V10到V16的弧.
请注意,节点和弧都是自动生成的,并且位置可能会有所不同,因此我需要一种自动方式来弯曲隐藏在其他弧后面的弧.
另请注意,这些解决方案都不是有效的:igraph:解决紧密重叠的节点 ; 使用igraph,如何在箭头指向相反方向时强制弯曲.第一个只是以某种方式放置de节点,但我的节点需要修复.第二个简单地处理具有两个连接它们的相反方向的节点对.
更新:图形的构建是使用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
Run Code Online (Sandbox Code Playgroud)
要将igraph
对象转换为 qgraph 可以使用的对象,您需要的只是一个边列表或邻接矩阵:
g <- make_ring(9)
edgeList <- do.call(rbind, igraph::get.adjedgelist(g))
qgraph(edgeList)
Run Code Online (Sandbox Code Playgroud)
如果您还想包含轴,则可以使用 qgraph 来实现,axis()
因为 qgraph 使用基础图形。但是,您可能还需要进行修改par()
才能使其看起来更漂亮。
归档时间: |
|
查看次数: |
339 次 |
最近记录: |