我使用 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
每个节点的x和y位置是绘图的位置。 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')
关于r - 从 igraph 到 ggplot 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54422076/