Построение сети 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:
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)