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

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

2 ответа

Решение

В 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 аргумент.

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

Другие вопросы по тегам