2016-10-26 8 views
0

Как нарисовать направленный сетевой граф с текстами по обе стороны от ребер в R (через iGraph, сеть или какой-либо другой пакет)?Как нарисовать направленный сетевой граф с текстами по обе стороны от ребер в R (через iGraph, сеть или какой-либо другой пакет)?

directed network graph with texts on both sides of edges

Переменные (в векторной модели авторегрессии (VAR)) находятся в узлах.

Каузальности Грейнджера (значения р статистики F) расположены по обе стороны от ребер. Я положил значения p в начало каждой стрелки. Я делаю приближенные существенные причины с добавлением подчеркивания.

Я не мог понять, как получить такую ​​схему сети через iGraph или сетевой пакет или что-то еще.

ответ

1

Вы можете использовать edge.label и vertex.label варианты вместе.

library(igraph) 
el <- data.frame(sender = c("lnbist1f","lnbist1f","lnbist1f", 
          "kur1f","kur1f","kur1f", 
          "lnaltin","lnaltin","lnaltin", 
          "mfaiz1f","mfaiz1f","mfaiz1f"), 
       receiver = c("mfaiz1f","lnaltin","kur1f", 
           "lnbist1f","lnaltin","mfaiz1f", 
           "mfaiz1f","lnbist1f","kur1f", 
           "lnbist1f","lnaltin","kur1f"), 
       pval = c(0.5,0.6,0.1, #I just typed random p-vals here 
          0.45,0.88,0.24, 
          0.12,0.51,0.99, 
          0.001,0.056,0.123) 
       ) 
arrows = c(2,1,0,0,1,1,1,0,0,2,1,1) 
el <- as.matrix(el) 
g <- graph_from_edgelist(el[,1:2], directed = T) 
coordinates <- matrix(c(4, 4, 1, 1, 4, -2,7,1), nrow = 4, byrow=TRUE) 
plot(g, edge.label=el[,3], 
    vertex.shape="crectangle", 
    vertex.size=45, 
    edge.arrow.mode=arrows, 
    layout = coordinates) 

edge.arrow.mode позволяет контролировать наконечники стрел. Вы можете перемещать метки кромки с помощью edge.label.y и edge.label.x.

igraph plot

+0

Спасибо, paqmo. Эта фигура мне просто нужна. К сожалению, будучи новичком в построении графика, я не смог получить эту цифру. Не могли бы вы указать здесь g-объект в вашем коде: 'plot (g, edge.label = el [, 3], vertex.shape =" crectangle ", vertex.size = 45, edge.arrow.mode = el [, 4]) '. В буфере у меня есть Карлос g. –

+0

@ErdoganCEVHER. К сожалению, g должен быть объектом графика, созданным из edgelist, - забыли включить этот код. Я обновил ответ, чтобы включить это. – paqmo

+0

Я выполнил недостающую часть в вашем определении g ('g <- graph_from_edgelist (el [, 1: 2], направлен =') как 'g <- graph_from_edgelist (el [, 1: 2], direct = TRUE)'. Затем я добавил перед графиком, что «координаты <- матрицы (c (4, 4, 1, 1, 4, -2,7,1), nrow = 4, byrow = TRUE)'. И, в сюжете я добавил сюжет (...., макет = координаты) .Таким образом, я получил диаграмму в форме бриллиантовой формы. Теперь только стрелочные головки отсутствовали, хотя я сделал «направленный = ИСТИННЫЙ» в определении g. –

1

Чтение documentation on the igraph plot function, кажется, что там не так много вариантов, чтобы манипулировать края этикетки, но вы можете управлять вершинными этикетками с label.dist и label.degree, например .. Вы можете сделать что-то подобное:

g <- graph.empty(n = 3) 
g <- graph(c(1, 2, 3, 2, 1, 3), directed = TRUE) 
labels <- c("A", "B", "C", "D", "E", "F") 
coords <- matrix(c(1, 1, 2, 2, 3, 3), nrow = 3) 
plot(g, layout = coords, vertex.label = labels, vertex.label.dist = 3.5, vertex.label.degree = c(-pi/4, pi/2, pi, -pi/2, 0, 3*pi/4)) 

Graph

+0

Спасибо, очень полезно. Возможно, исходя из вашего кода, полный сетевой график на рисунке может быть легко получен. –

+0

Вышеупомянутый код вытаскивает объект vertex.label для какой-либо другой цели. Но тогда, как можно навязывать имена узлов (т. Е. Kur1f, lnbist1f, lnaltin, mfaiz1f в приведенном выше)? !! –