首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从一个图形对象到一个igraph对象?(R)

如何从一个图形对象到一个igraph对象?(R)
EN

Stack Overflow用户
提问于 2021-12-27 16:04:45
回答 1查看 156关注 0票数 0

我想要创建一个交互式的丰富地图。我使用了来自emapplot包的浓缩图函数来完成这个任务。但是这个函数返回一个静态图。我想让它使用(最好是) visNetwork包进行交互。

emapplot函数返回一个ggraph对象。我找不到一个函数来将ggraph对象转换为igraph/visNetwork/tbl_graph对象。然后我考虑了提取节点和边缘信息。

这可以用来创建一个示例ggraph对象。

代码语言:javascript
复制
library(igraph)
library(ggraph)
library(tidyverse)

graph <- graph_from_data_frame(highschool)
graph2 <- ggraph(graph, layout = "kk") + 
    geom_edge_link(aes(colour = factor(year))) + 
    geom_node_point()

attributes(graph2)

输出:

代码语言:javascript
复制
$names
[1] "data"        "layers"      "scales"      "mapping"     "theme"       "coordinates" "facet"       "plot_env"    "labels"     

$class
[1] "ggraph" "gg"     "ggplot"

使用graph2$data可以获得节点位置。

代码语言:javascript
复制
           x          y name .ggraph.orig_index circular .ggraph.index
1  0.7326425  2.3767052    1                  1    FALSE             1
2  0.7041666  2.9986454    2                  2    FALSE             2
3  1.5125110  2.9624914    3                  3    FALSE             3
4 -2.7467842 -1.0804763    4                  4    FALSE             4
5 -2.8196405  0.2369667    5                  5    FALSE             5
6 -2.6184244  2.1968979    6                  6    FALSE             6

现在,我需要知道,现在,获得边缘信息。

我看到像ggraph::get_edges这样的函数使用geom_edge_link来检索边缘信息。不幸的是我没能让这个发挥作用。

有人知道如何从ggraph对象获取边缘信息,还是将其转换为change对象?

编辑

根据camille的要求,这里是一个使用emapplot函数的示例

代码语言:javascript
复制
if (!requireNamespace("BiocManager", quietly = TRUE))
    install.packages("BiocManager")

BiocManager::install("enrichplot")

library(DOSE)
library(ggnewscale)
library(ggraph)
library(igraph)
library(enrichplot)

data(geneList)
de <- names(geneList)[1:100]
x <- enrichDO(de)
x2 <- pairwise_termsim(x)
graph <- emapplot(x2)
EN

回答 1

Stack Overflow用户

发布于 2021-12-28 09:53:27

找到了!

假设您有一个名为x的ggobject。您可以将节点和边缘信息提取为一个tbl_graph对象(这是一个info对象的包装器),如下所示:

代码语言:javascript
复制
graph_info <- attributes(x$data)$graph

# If you want to plot it using visNetwork
visNetwork::visIgraph(graph_info)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70497768

复制
相关文章

相似问题

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