DiagrammeR: разработка графика из блока данных - PullRequest
0 голосов
/ 11 декабря 2018

Цель (в среде R): извлечь узлов и ребер из кадра данных, чтобы использовать их для моделирования графа !!

Я пытаюсь научиться работать с DiagrammeR или любыми другими библиотеками моделирования графиков, чтобы получить график, такой как приведенный ниже (вы можете перейти по ссылке [THE GRAPH 1 ]) из данныхframe:

Фрейм данных:

a b c classes
1 2 0  a
0 0 2  b
0 1 0  c

Я использовал DiagrammeR library и определял узлы и ребра вручную с помощью этих команд:

library(DiagrammeR)
egrViz("
digraph boxes_and_circles{
#add the node statement
node[shape=box]

a; b; c;
#add the nodge statement

a->a [label=1]; a-> b[label=2]; b->c[label=2]; c->b[label=1]



graph [nodesep=0.1]

}

  ")

Не могли бы вы помочь мне понять, как я могу автоматически получить узлы и ребра?Заранее спасибо.

enter image description here

1 Ответ

0 голосов
/ 11 декабря 2018

Вы можете сделать это с пакетом igraph.Ваш фрейм данных - это матрица смежности, а в igraph есть функция, которая превращает это в граф.Мой код ниже добавляет макет для позиционирования вершин в положениях, которые вы указали в своем образце графика.

## Your data
df = read.table(text="a b c classes
1 2 0  a
0 0 2  b
0 1 0  c", 
header=TRUE)

library(igraph)

g = graph_from_adjacency_matrix(as.matrix(df[,1:3]), weighted=TRUE)
LO = matrix(c(0,0,0,3,2,1), ncol=2)
plot(g, layout=LO, edge.label=E(g)$weight, vertex.shape="rectangle",
    vertex.color="white", edge.curved=c(0,0,0.15,0.15))

Graph from Adjacency Matrix

...