R взаимные ребра в igraph в R - PullRequest
       21

R взаимные ребра в igraph в R

4 голосов
/ 19 апреля 2011

Я работаю с графиками в R. Я в настоящее время использую igraph, и я хотел бы иметь возможность рисовать двунаправленные ребра "взаимные ребра" графа.До сих пор я видел, что можно строить «двунаправленные» графики, но не взаимные ребра, например: E (1,3) и E (3,1) потенциально можно представить как двунаправленное ребро <->, новместо этого я хотел бы построить два параллельных ребра, одно из которых указывает на противоположное направление другого ||,В Rgraphviz есть опция при построении «plot (rEG, receEdges =« Different »)», которая делает это, но мне больше нравится, как графики выглядят на igraph.Заранее спасибо.

Ответы [ 2 ]

5 голосов
/ 19 апреля 2011

В igraph вы можете использовать атрибут ребра curved для изгиба нужных ребер.

Например, вот небольшая матрица смежности на основе графа:

library("igraph")
adj <- matrix(c(
    0,1,1,
    1,0,1,
    0,0,0),3,3,byrow=TRUE)

library("igraph")
G <- graph.adjacency(adj)

Ребро между узлом 0 и 1 является двунаправленным (на самом деле это не так, это два ребра, и они просто выглядят как двунаправленное ребро, потому что они прямые).:

plot(G)

Чтобы изменить это,мы можем использовать список краев:

E <- t(apply(get.edgelist(G),1,sort))

E(G)$curved <- 0
E(G)[duplicated(E) | duplicated(E,fromLast =TRUE)]$curved <- 0.2

plot(G)

Другой вариант - мой пакет, где используется поведение по умолчанию:

library("qgraph")
qgraph(adj)

, которое можно подавить с помощью аргумента bidirectional.

2 голосов
/ 19 апреля 2011

Попробуйте plot(graph, edge.curved=TRUE). Он определенно работает в igraph 0.6 и может также работать в igraph 0.5.4 (не уверен, когда он был добавлен).

...