我有以下网络图:
library(tidyverse)
library(igraph)
set.seed(123)
n=5
data = tibble(d = paste(1:n))
relations = data.frame(tibble(
from = sample(data$d),
to = lead(from, default=from[1]),
))
graph = graph_from_data_frame(relations, directed=T, vertices = data)
V(graph)$color <- ifelse(data$d == relations$from[1], "red", "orange")
plot(graph, layout=layout.circle, edge.arrow.size = 0.2)

我希望将每个节点连接到此图上的每个节点--我可以通过重新定义“关系”数据框架来手动完成此操作:
relations_1 = data.frame("from" = c(1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5), "to" = c(2,3,4,5,1,3,4,5,1,2,4,5,1,2,3,5,1,2,3,4))然后,我可以重新运行网络图:
graph = graph_from_data_frame(relations_1, directed=T, vertices = data)
V(graph)$color <- ifelse(data$d == relations_1$from[1], "red", "orange")
plot(graph, layout=layout.circle, edge.arrow.size = 0.2)

谢谢!
发布于 2022-03-30 04:35:03
您只需使用relations更新complete,就可以筛选出from等于to的行,后者将箭头从节点提供给自己。
relations <- relations %>%
complete(from, to) %>%
dplyr::filter(from != to)发布于 2022-03-30 09:30:43
一种使用igraph::make_full_graph的解决方案
relations %>%
with(union(from,to)) %>%
{
G <- make_full_graph(length(.), directed = TRUE)
V(G)$name <- .
G
}

发布于 2022-03-30 20:34:07
如果您脱离了graph,您可以使用add_edges + get.adjacency尝试以下代码
graph %>%
add_edges(c(t(which(`diag<-`(get.adjacency(., sparse = FALSE), 1) != 1, arr.ind = TRUE))))它在保留原始graph对象属性的同时添加所有缺失的边,您将看到

https://stackoverflow.com/questions/71671488
复制相似问题