1

我想创建这个简单的 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)

在此处输入图像描述

带图解

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

产生此错误

file.exists(图表)中的错误:无效的“文件”参数

我也试过

grViz(readLines(mygraph2)) 

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

我该怎么做?

我已经打开了一个新问题,直接使用 DiagrammeR 获得相同的结果,没有 igraph:

如何使用 DiagrammeR 创建网络图?

4

2 回答 2

3

似乎有几件事正在发生。

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(from = as.integer(igraph::ends(igraph, igraph::E(igraph))[, : 强制引入的 NA

如果您查看mygraph2没有节点或边缘信息,它不会呈现:render_graph(mygraph2)。但是警告信息很丰富,因为它指向代码行(as.integer(ends(mygraph, E(mygraph), names=TRUE)):也许我们想要 names=FALSE),所以尝试删除 names ,但设置标签

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))
于 2017-06-25T17:37:57.757 回答
1

您的过程中有两个问题。

第一个在命令中from_igraph。我不确定,可能是包中的错误,可能是我的设置有问题,但我无法使用它来获得所需的结果。以下适用于我的机器。

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

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

render_graph(mygraph3)
于 2017-06-25T17:39:58.420 回答