我想要创建一个交互式的丰富地图。我使用了来自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对象获取边缘信息,还是将其转换为change对象?
编辑
根据camille的要求,这里是一个使用emapplot函数的示例。
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)发布于 2021-12-28 09:53:27
找到了!
假设您有一个名为x的ggobject。您可以将节点和边缘信息提取为一个tbl_graph对象(这是一个info对象的包装器),如下所示:
graph_info <- attributes(x$data)$graph
# If you want to plot it using visNetwork
visNetwork::visIgraph(graph_info)https://stackoverflow.com/questions/70497768
复制相似问题