从igraph到ggplot对象

时间:2019-01-29 13:22:12

标签: 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变成ggplot的任何帮助,我们将不胜感激。

编辑:带有dput()的数据(对不起,以前没有使用过,所以我不知道它是否正确)

  

dput(EL)   结构(列表(来自= c(“印欧语系”,“阿尔巴尼亚语”,“ Gheg”,   “阿尔巴尼亚语”,“托斯克”,“托斯克”,“托斯克”,“印欧语”,“亚美尼亚语”,   “亚美尼亚语”,“印欧语”,“巴尔托斯拉夫语”,“波罗的海语”,“东部”,   “东部”,“东部”,“东部”,“波罗的海”,“西部”,“巴尔托-斯拉夫”   “斯拉夫语”,“东方”,“东方”,“东方”,“东方”,“斯拉夫语”,“南方”,   “东南”,“东南”,“东南”,“南方”,“西南”,   “西南”,“西南”,“西南”,“西南”   “斯拉夫语”,“西方语”,“捷克斯洛伐克语”,“捷克斯洛伐克语”,“西方语”,“精神分裂症”,   “ Lechitic”,“ Lechitic”,“ West”,“ Sorbian”,“ Sorbian”,“ Indo-European”,   “凯尔特人”,“孤岛”,“ Brythonic”,“ Brythonic”,“ Brythonic”,“ Insular”,   “ Goidelic”,“ Goidelic”,“ Goidelic”,“ Indo-European”,“ Germanic”,   “北日耳曼语”,“东斯堪的纳维亚语”,“东斯堪的纳维亚语”,“丹麦-瑞典语”,   “丹麦语-博克马尔语”,“丹麦语-瑞典语”,“丹麦语-里克斯马尔语”,“丹麦语-瑞典语”,   “北日耳曼语”,“西北欧语”,“西北欧语”,“德语”,   “西日耳曼语”,“英语”,“英语”,“西日耳曼语”,“弗里斯兰语”,   “弗里斯兰语”,“弗里斯兰语”,“西日耳曼语”,“高级德语”,“德语”,   “德语”,“中德”,“东德中”,“东德中”   “东德德语”,“东德德语”,“中德德语”,   “西中德”,“西中德”,“西中德”   “西中德文”,“摩泽尔法兰克”,“德文”,“上德文”,   “上德语”,“阿勒曼尼克”,“阿勒曼尼克”,“阿勒曼尼克”,“阿勒曼尼克”,   “上德语”,“巴伐利亚奥地利”,“巴伐利亚奥地利”,“巴伐利亚奥地利”,   “巴伐利亚奥地利”,“高级德语”,“仪德”,“仪德”,“西日耳曼”   “低撒克逊人-低法兰克人”,“低法兰克人”,“低法兰克人”,   “低法兰克”,“低法兰克”,“低法兰克”,“低萨克森-低法兰克”   “低度撒克逊”,“低度撒克逊”,“低度撒克逊”,“低度撒克逊”,“低度撒克逊”,   “低度撒克逊”,“低度撒克逊”,“低度撒克逊”,“低度撒克逊”,“低度撒克逊”,   “低撒克逊人”,“印欧语”,“希腊语”,“阁楼”,“阁楼”,“阁楼”,   “阁楼”,“阁楼”,“希腊语”,“多立克体”)到= c(“阿尔巴尼亚语”,“ Gheg”,   “ Gheg Albanian”,“ Tosk”,“ Arbereshe Albanian”,“ Arvanitika Albanian”,   “ Tosk阿尔巴尼亚语”,“亚美尼亚语”,“亚美尼亚语(语言)”,“西亚美尼亚语”,   “巴尔托斯拉夫语”,“波罗的海语”,“东部”,“拉脱维亚语”,“标准拉脱维亚语”,   “立陶宛语”,“萨莫吉特语”,“西方”,“普鲁士语”,“斯拉夫语”,   “东部”,“白俄罗斯”,“俄罗斯”,“ Rusyn”,“乌克兰”,“南部”,   “东南”,“保加利亚”,“马其顿”,“教会斯拉夫尼克”,   “西南”,“波斯尼亚”,“克罗地亚”,“黑山”,“塞尔维亚”,   “斯洛文尼亚”,“西部”,“捷克斯洛伐克”,“捷克”,“斯洛伐克”,“荔枝”,   “ Kashubian”,“ Polish”,“ Silesian”,“ Sorbian”,“ Lower Sorbian”,   “上索布族”,“凯尔特人”,“孤岛”,“ Brythonic”,“ Breton”,   “康沃尔”,“威尔士”,“哥特式”,“爱尔兰”,“曼克斯”,“苏格兰盖尔”,   “德语”,“北日耳曼语”,“东斯堪的纳维亚语”,“俄文版”   “丹麦语-瑞典语”,“丹麦语-博克马尔语”,“挪威语”,“丹麦语-里克斯马尔语”,   “丹麦语”,“瑞典语”,“西北欧语”,“法罗语”,“冰岛语”,   “西日耳曼语”,“英语”,“英语(语言)”,“苏格兰语”,“弗里斯兰语”,   “弗里斯兰语(语言)”,“北弗里斯兰语”,“萨特弗里斯兰语”,“高级德语”,   “德语”,“洪斯克里克”,“中德”,“东德中”,“标准德”,   “上撒克逊人”,“下西里西亚人”,“ Wymysory”,“西德中”   “宾夕法尼亚州德语”,“普法尔茨法郎”,“里普里亚语”,“摩泽尔弗兰克语”,   “卢森堡语”,“上德语”,“东法兰克语”,“阿勒曼语”,   “ Colonia Tovar German”,“ Swiss German”,“ Swabian”,“ Walser”,   “巴伐利亚奥地利”,“巴伐利亚”,“辛布里安”,“哈特里施”,“莫切诺”,   “意第绪语”,“东部意第绪语”,“西方意第绪语”,“低撒克逊语-低法兰克语”   “低法兰克语”,“南非语”,“荷兰语”,“林堡语”,“弗拉姆斯”,   “ Zeeuws”,“ Low Saxon”,“ Achterhoeks”,“ Drents”,“ Gronings”,“ Plautdietsch”,   “ Sallands”,“ East Frisian Low Saxon”,“ Low Saxon”,“ Stellingwerfs”,   “特温特人”,“ Veluws”,“ Westphalien”,“希腊语”,“阁楼”,“ Cappadocian希腊语”,   “希腊语(语言)”,“古希腊语”,“语音”,“ Yevanic”,“ Doric”,   “ Tsakonian”)),类=“ data.frame”,row.names = c(NA,-136L))

1 个答案:

答案 0 :(得分:0)

布局告诉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')

enter image description here