我正在尝试使用圆形布局中的标记节点生成交互网络图。我拼凑了一个功能脚本,显示了我想要与 ggraph 的连接,但我不知道如何相对于圆形排列中的位置定位节点标签,因此它们不会与连接线重叠地点。有人在使用 igraph 时针对相同的问题发布了一个非常好的解决方案(将 vertex.label 放置在 igraph 中的圆形布局之外);但我认为这不适用于 ggraph,因为计算节点位置的方式似乎不同。我更喜欢为此使用 ggraph,因为它具有内置的图例功能,可以让我的生活更轻松。这是我到目前为止所拥有的:
library(igraph)
library(tidyverse)
library(ggraph)
# Create example matrix
id <- c("s01", "s02", "s03", "s04", "s05")
s01 <- c(0, 0, 0, 1, 1)
s02 <- c(0, 0, 1, 1, 1)
s03 <- c(1, 0, 0, 0, 1)
s04 <- c(0, 1, 0, 0, 0)
s05 <- c(0, 0, 0, 0, 0)
links <- data.frame(id, s01, s02, s03, s04, s05)
links <- column_to_rownames(links, var = "id")
links <- as.matrix(links)
expertise <- c("neuro", "micro", "phys", "phys", "neuro")
nodes <- data.frame(id, expertise)
# Generate igraph object
network <- graph_from_adjacency_matrix(links, weighted = NULL, mode = "undirected")
# Generate plot
ggraph(network, layout = "circle") + geom_edge_arc(color = "darkgray", strength = 0.15) +
geom_node_point(size = 8, aes(color = nodes$expertise)) + geom_node_text(aes(label = id), nudge_y = -0.2) +
theme_void()
问题是像 s02 这样的标签在网络内部,这成为更密集的图的问题。
有没有办法将所有标签放在节点圈之外?非常感激任何的帮助!