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 (не уверен, когда он был добавлен).