我想绘制一个包含循环的圆形网络,即边的起点和终点在同一节点。如果节点之间有许多连接,则会出现问题,即循环始终绘制在右侧。这导致图形呈现非常不愉快。对于小型网络,可以手动解决此问题(例如,请参见此post)。
然而,对于可能不总是包含相同循环的大型网络,这变得更加困难。因此,我正在寻找一种自动化的方法(而不是上述手动过程),以始终将循环放置在网络的外部,以确保它们不会与绘图中的边重叠。
此问题的示例可能如下所示,其中特别是节点“g”,“h”,“i”以及在某种程度上“j”遭受此问题。该图仅限于包含权重大于5的边,以表明并非所有循环必须始终可用。
示例网络:
复制网络的代码:
# packages
library(ggraph)
library(igraph)
# create example data
set.seed(123)
adj_mat <- matrix(runif(100, 0, 10), nrow=10)
colnames(adj_mat) <- letters[1:10]
# create graph object and remove edges below threshold
g <- graph_from_adjacency_matrix(adj_mat, weighted = T, diag = T)
g <- delete.edges(g, which(E(g)$weight < 5))
# plot
ggraph(g, layout = "circle") +
geom_edge_link() +
geom_edge_loop() +
geom_node_circle(aes(r=0.1), fill = "orange") +
geom_node_text(aes(label = colnames(adj_mat))) +
theme(aspect.ratio = 1)