Построение сети igraph с DiagrammeR

Я хотел бы создать этот простой сюжет игры:

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)

С диаграммой R

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

Выдает эту ошибку

Ошибка в file.exists(диаграмма): неверный аргумент 'file'

Я также пытался с

grViz(readLines(mygraph2)) 

и другие комбинации или команда plot(), но я не могу найти правильный путь.

Как мне это сделать?

Я открыл новый вопрос, чтобы получить тот же результат напрямую с DiagrammeR, без igraph:

Как создать сетевой график с DiagrammeR?

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(from = as.integer(igraph::end (igraph, igraph::E(igraph)))[,: NA введены по принуждению

И если вы посмотрите на mygraph2 нет информации об узле или ребре, и она не отображает: render_graph(mygraph2), Но предупреждение является информативным, так как оно указывает на строки кода (as.integer(ends(mygraph, E(mygraph), names=TRUE)): может быть, мы хотим, чтобы names=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))

В вашем процессе есть две проблемы.

Первый в команде from_igraph, Я не уверен, может быть, это ошибка в пакете, может быть, это проблема с моими настройками, но я не смог использовать ее для получения желаемого результата. Следующее работает на моей машине.

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

И тогда вам нужно render_graph или что-то подобное, чтобы получить свой график, grViz для строкового представления графа, а не для самого графа.

render_graph(mygraph3)
Другие вопросы по тегам