r - 从 igraph 到 ggplot 对象

标签 r ggplot2 igraph

我使用 ggraph 和 igraph 构建了树状图。

library(ggraph)
library(igraph)
EL <- read.csv("EL2.csv", sep=";",header=TRUE, stringsAsFactors = FALSE)
ELM <-as.matrix(EL)
mygraph <- graph_from_data_frame(ELM)
ggraph(mygraph, layout = 'dendrogram', circular = TRUE) + 
  geom_edge_diagonal() +
  geom_node_point() +
  theme_void()

但是,我需要节点和边的基础数据才能在 Tableau 中重新创建它。

我想使用 ggplot_build,但这需要一个 ggplot 对象。为了创建它,我尝试使用 ig2ggplot,但它返回一个错误:

ig2ggplot(mygraph, dfOnly = FALSE, labels = FALSE, metab = TRUE)

layout.norm(g$layout, xmax = 1, xmin = 0, ymin = 0, ymax = 1) 中的错误: “布局”不是矩阵

这是否意味着我必须将 igraph 转换为矩阵?因为剧情看起来和我想要的一模一样。我只是想阻止底层数据。任何关于如何将我的 igraph 变成 ggplot 的帮助将不胜感激。

编辑:使用 dput() 的数据(抱歉,之前没有使用过这个,所以我不知道它是否正确)

dput(EL) structure(list(from = c("Indo-European", "Albanian", "Gheg", "Albanian", "Tosk", "Tosk", "Tosk", "Indo-European", "Armenian", "Armenian", "Indo-European", "Balto-Slavic", "Baltic", "Eastern", "Eastern", "Eastern", "Eastern", "Baltic", "Western", "Balto-Slavic", "Slavic", "East", "East", "East", "East", "Slavic", "South", "South Eastern", "South Eastern", "South Eastern", "South", "South Western", "South Western", "South Western", "South Western", "South Western", "Slavic", "West", "Czech-Slovak", "Czech-Slovak", "West", "Lechitic", "Lechitic", "Lechitic", "West", "Sorbian", "Sorbian", "Indo-European", "Celtic", "Insular", "Brythonic", "Brythonic", "Brythonic", "Insular", "Goidelic", "Goidelic", "Goidelic", "Indo-European", "Germanic", "North Germanic", "East Scandinavian", "East Scandinavian", "Danish-Swedish", "Danish-Bokmal", "Danish-Swedish", "Danish-Riksmal", "Danish-Swedish", "North Germanic", "West Scandinavian", "West Scandinavian", "Germanic", "West Germanic", "English", "English", "West Germanic", "Frisian", "Frisian", "Frisian", "West Germanic", "High German", "German", "German", "Middle German", "East Middle German", "East Middle German", "East Middle German", "East Middle German", "Middle German", "West Middle German", "West Middle German", "West Middle German", "West Middle German", "Moselle Franconian", "German", "Upper German", "Upper German", "Alemannic", "Alemannic", "Alemannic", "Alemannic", "Upper German", "Bavarian-Austrian", "Bavarian-Austrian", "Bavarian-Austrian", "Bavarian-Austrian", "High German", "Yiddish", "Yiddish", "West Germanic", "Low Saxon-Low Franconian", "Low Franconian", "Low Franconian", "Low Franconian", "Low Franconian", "Low Franconian", "Low Saxon-Low Franconian", "Low Saxon", "Low Saxon", "Low Saxon", "Low Saxon", "Low Saxon", "Low Saxon", "Low Saxon", "Low Saxon", "Low Saxon", "Low Saxon", "Low Saxon", "Indo-European", "Greek", "Attic", "Attic", "Attic", "Attic", "Attic", "Greek", "Doric"), to = c("Albanian", "Gheg", "Gheg Albanian", "Tosk", "Arbereshe Albanian", "Arvanitika Albanian", "Tosk Albanian", "Armenian", "Armenian (language)", "Western Armenian", "Balto-Slavic", "Baltic", "Eastern", "Latgalian", "Standard Latvian", "Lithuanian", "Samogitian", "Western", "Prussian", "Slavic", "East", "Belarusian", "Russian", "Rusyn", "Ukrainian", "South", "South Eastern", "Bulgarian", "Macedonian", "Church Slavonic", "South Western", "Bosnian", "Croatian", "Montenegrin", "Serbian", "Slovene", "West", "Czech-Slovak", "Czech", "Slovak", "Lechitic", "Kashubian", "Polish", "Silesian", "Sorbian", "Lower Sorbian", "Upper Sorbian", "Celtic", "Insular", "Brythonic", "Breton", "Cornish", "Welsh", "Goidelic", "Irish", "Manx", "Scottish Gaelic", "Germanic", "North Germanic", "East Scandinavian", "Oevdalian", "Danish-Swedish", "Danish-Bokmal", "Norwegian", "Danish-Riksmal", "Danish", "Swedish", "West Scandinavian", "Faroese", "Icelandic", "West Germanic", "English", "English (language)", "Scots", "Frisian", "Frisian (language)", "Northern Frisian", "Saterfrisian", "High German", "German", "Hunsrik", "Middle German", "East Middle German", "Standard German", "Upper Saxon", "Lower Silesian", "Wymysory", "West Middle German", "Pennsylvania German", "Palatinate Franconian", "Ripurian", "Moselle Franconian", "Luxembourgish", "Upper German", "Eastern Franconian", "Alemannic", "Colonia Tovar German", "Swiss German", "Swabian", "Walser", "Bavarian-Austrian", "Bavarian", "Cimbrian", "Hutterisch", "Mocheno", "Yiddish", "Eastern Yiddish", "Western Yiddish", "Low Saxon-Low Franconian", "Low Franconian", "Afrikaans", "Dutch", "Limburgish", "Vlaams", "Zeeuws", "Low Saxon", "Achterhoeks", "Drents", "Gronings", "Plautdietsch", "Sallands", "East Frisian Low Saxon", "Low Saxon", "Stellingwerfs", "Twents", "Veluws", "Westphalien", "Greek", "Attic", "Cappadocian Greek", "Greek (language)", "Ancient Greek", "Pontic", "Yevanic", "Doric", "Tsakonian")), class = "data.frame", row.names = c(NA, -136L))

最佳答案

布局告诉igraph每个节点的xy位置是绘图的位置。 ig2ggplot 要求将布局存储为图形属性。你需要做这样的事情

mygraph <- igraph::graph_from_data_frame(ELM) #create a graph
mylayout <- igraph::layout_as_tree(mygraph, circular = T) #create a circular layout

mygraph$layout = mylayout #store layout as a graph attribute


#another gotcha is that ig2ggplot needs both vertex names and vertex labels. 
#as of now you just have vertex names. 
V(mygraph)$label = V(mygraph)$name #store label as a vertex attrbute


MetamapsDB::ig2ggplot(mygraph, 
                      dfOnly = FALSE, 
                      labels = FALSE, 
                      metab = TRUE ) + 
    theme(legend.position = 'none')

enter image description here

关于r - 从 igraph 到 ggplot 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54422076/

相关文章:

r - ggplot2 问题 : Error in FUN(X[[i]], ...) : 未找到对象 'HR'

r - igraph 1.0 中 Fruchterman-Reingold 布局的 maxdelta 等价物?

r - Shiny :用一些文本描述或默认绘图替换 renderPlotly 错误

r - ggplot2 中 X 轴变量标签上的真正减号

R:有没有办法捕获所有函数参数值

r - 在 R 中绘制二元图

R- iGraph错误: weight vector too short,应用社区检测算法时值无效

r - 从 igraph 对象中提取 vnames

r - 提取交互式图中鼠标单击的确切坐标

r - 如何更改和/或分离 r 图形图例中的组件?