【发布时间】:2022-01-26 13:17:05
【问题描述】:
我想创建一个交互式丰富地图。我使用了enrichplot 包中的emapplot 函数来执行此操作。但是这个函数返回一个静态图。我想使用(最好)visNetwork 包使其具有交互性。
emapplot 函数返回一个 ggraph 对象。我找不到将 ggraph 对象更改为 igraph/visNetwork/tbl_graph 对象的函数。于是我想到了提取节点和边的信息。
这可用于创建示例 ggraph 对象。
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)
输出:
$names
[1] "data" "layers" "scales" "mapping" "theme" "coordinates" "facet" "plot_env" "labels"
$class
[1] "ggraph" "gg" "ggplot"
可以使用graph2$data获取节点位置。
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 对象中获取边缘信息,或者将其更改为 igraph 对象吗?
编辑
应 camille 的要求,这里是使用 emapplot 函数的example。
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)
【问题讨论】:
-
我不熟悉enrichplot,但为了澄清一下,您从一个图形/ggplot 对象(来自ggraph)开始,并试图从中提取图形数据作为igraph 对象?还是数据框?如果您包含
emapplot部分可能会有所帮助,以便我们知道您当时拥有什么,或者是否有替代方案可以让您维护 igraph 对象 -
我只找到了一个用于富集图的 R 包。
emapplot的输出是一个 ggraph 对象。例如,我提供了一个“简单”的 ggraph 对象。我正在尝试使用 visNetwork 使其具有交互性。所以我必须从这个 ggraph 对象转到一个 visNetwork 对象。如果我有 igraph 对象,或者如果我有节点/边缘信息,我可以这样做。但我不知道如何将 ggraph 对象转换为 igraph 对象。我也不知道如何提取边缘信息。我将提供一个使用 emapplot 函数的示例。
标签: r graph igraph visnetwork ggraph