首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将所有节点连接在一个图上

将所有节点连接在一个图上
EN

Stack Overflow用户
提问于 2022-03-30 04:26:04
回答 3查看 287关注 0票数 3

我有以下网络图:

代码语言:javascript
运行
复制
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)

我希望将每个节点连接到此图上的每个节点--我可以通过重新定义“关系”数据框架来手动完成此操作:

代码语言:javascript
运行
复制
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))

然后,我可以重新运行网络图:

代码语言:javascript
运行
复制
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)

  • ,但是会不会有一种方法“自动”连接图形中的所有点,直接使用“关系”数据框架,而无需手动创建新的数据框架"relations_1"?是否可以添加一行(或几行)代码,自动获取“关系”数据框架并将所有内容连接在一起?

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-03-30 04:35:03

您只需使用relations更新complete,就可以筛选出from等于to的行,后者将箭头从节点提供给自己。

代码语言:javascript
运行
复制
relations <- relations %>% 
  complete(from, to) %>% 
  dplyr::filter(from != to)
票数 2
EN

Stack Overflow用户

发布于 2022-03-30 09:30:43

一种使用igraph::make_full_graph的解决方案

代码语言:javascript
运行
复制
relations %>%
  with(union(from,to)) %>%
  {
    G <- make_full_graph(length(.), directed = TRUE)
    V(G)$name <- .
    G
  }

票数 2
EN

Stack Overflow用户

发布于 2022-03-30 20:34:07

如果您脱离了graph,您可以使用add_edges + get.adjacency尝试以下代码

代码语言:javascript
运行
复制
graph %>%
    add_edges(c(t(which(`diag<-`(get.adjacency(., sparse = FALSE), 1) != 1, arr.ind = TRUE))))

它在保留原始graph对象属性的同时添加所有缺失的边,您将看到

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71671488

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档