2017-06-25 49 views
1

我想创造这个简单的igraph情节:绘制的igraph网络制图

library(igraph) 
mydata <- data.table(from=c("John", "John", "Jim"),to=c("John", "Jim", "Jack")) 
mygraph <- graph_from_data_frame(d=mydata, directed=T) 
plot(mygraph, vertex.label.dist=2) 

enter image description here

随着制图

library(DiagrammeR) 
mygraph2 <- from_igraph(mygraph) 
grViz(mygraph2) 

生成此错误

错误在file.exists(图)中:无效的“文件”的说法

我也试图与

grViz(readLines(mygraph2)) 

和其他组合或命令图(),但我无法找到正确的方法。

我该怎么办?

我已经openen一个新的问题直接与制图得到相同的结果,没有IGRAPH:

How to create a network graph with DiagrammeR?

+0

你想'render_graph'吗? – user20650

回答

2

似乎有事情一对夫妇的事情。

library(igraph) 
library(DiagrammeR) 

mydata <- data.table(from=c("John", "John", "Jim"),to=c("John", "Jim", "Jack")) 
mygraph <- graph_from_data_frame(d=mydata, directed=TRUE) 

下面的代码引发警告

mygraph2 <- from_igraph(mygraph) 

警告消息: 1:在data.frame(来自= as.integer(的igraph ::端(的igraph,IGRAPH ::电子商务(IGRAPH)),: 来港受到胁迫

如果你看一下mygraph2没有节点或边缘信息,并且它不[R介绍恩德尔:render_graph(mygraph2)。但警告信息,因为它指向的代码行(as.integer(ends(mygraph, E(mygraph), names=TRUE)):也许我们要名= FALSE),所以尝试删除名称,但设置标签

V(mygraph)$label = V(mygraph)$name 
V(mygraph)$name = factor(V(mygraph)$name, levels=as.character(V(mygraph)$name)) 

无警告,并呈现

mygraph2 <- from_igraph(mygraph) 
render_graph(mygraph2) 

如果您想查看dot的代码,您可以使用generate_dot,然后将其传递给grViz,但是,这是render_graph正在执行的操作。

grViz(generate_dot(mygraph2)) 
+0

像这样做还是试图直接用Diagrammer创建图形,而不用igraph? – skan

+0

我需要从大型数据集创建图形。我第一次尝试使用igraph是因为它将节点自动放置在一个不错的位置。这正是我在教程中读到的内容。但我不知道这两种方法都有哪些优点或缺点。尽管我使用的软件包越少越好,也许我不需要igraph步骤。 – skan

+0

好,如果你的图表很大,然后自动生成图形,而不是输入graphviz代码将是有用的(我不知道'generate_dot',所以我可以使用它自己生成初始graphviz代码,然后我可以手动进行更改) – user20650

1

您的过程中有两个问题。

第一个是命令from_igraph。我不确定,也许这是包中的一个错误,也许这是我的设置问题,但我无法使用它来获得理想的结果。以下在我的机器上工作。

mygraph3 <- from_adj_matrix(as.matrix(get.adjacency(mygraph)), mode = "directed") 

然后你需要render_graph或类似的东西让你的图形,grViz是图形字符串表示,而不是图形本身。

render_graph(mygraph3) 
+0

如果我们将您的方法的结果与user20650的方法进行比较,那么您的方法不会生成箭头。 – skan

+0

在'from_adj_matrix'中设置'mode =“指示”'' – user20650

+0

@skan我在文章中纠正了这个错误。为了从相邻矩阵生成有向图,必须将参数'mode'设置为“directed”,然后它会给出有向图。谢谢你指出。 – Consistency