[英]How to go from a ggraph object to an igraph object? (R)
我想創建一個交互式擴充 map。 我使用了來自emapplot
package 的emapplot function 來執行此操作。 但是這個 function 返回 static plot。 我想使用(最好) visNetwork package 使其具有交互性。
emapplot
function 返回一個 ggraph object。 我找不到 function 將 ggraph object 更改為 igraph/visNetwork/tbl_graph object。 於是我想到了提取節點和邊緣信息。
這可用於創建示例 ggraph object。
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)
Output:
$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 object 獲取邊緣信息,或者將其更改為 igraph object?
編輯
應 camille 的要求,這里是使用 emapplot function 的示例。
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)
找到了!
假設您有一個名為x
的 ggobject。 您可以將節點和邊緣信息提取為tbl_graph
object(這是 igraph 對象的包裝器),如下所示:
graph_info <- attributes(x$data)$graph
# If you want to plot it using visNetwork
visNetwork::visIgraph(graph_info)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.