Многогранные ребра igraph

Я хотел бы выразить ребра между вершинами 1 и 2 на следующем графике как два отдельных ребра со стрелками в противоположных направлениях.

require(igraph) 
e <-  c(1,2, 2,3, 3,1, 3,4 , 4,1 , 2,1)
g <- graph(e, n=5, directed = TRUE)
tkplot(g, layout=layout.circle )

Я получаю только один край со стрелкой на обоих концах. Это должно быть легко, но я нигде не нашел и не могу понять. Любая идея?

1 ответ

Вы должны построить график с изогнутыми краями. Обратите внимание, что в plot()кривляешься с edge.curved, но атрибуты ребер для отдельных кривых должны быть curved только.

Ниже функция curve.reciprocal.edges() Я написал после того, как нашел ответ Sacha Epskamp, ​​который, очевидно, написал пакет, qgraph, который может оказаться полезным для изучения, если ваши потребности превышают то, что может быть достигнуто этим:

require(igraph)
e <-  c(1,2, 2,3, 3,1, 3,4 , 4,1 , 2,1)
g <- graph(e, n=5, directed = TRUE)

curve.reciprocal.edges <- function(g, curve=.3){
    # Return a graph where the edge-attribute $curved is reset to highlight reciprocal edges
    el <- t(apply(get.edgelist(g),1,sort))
    E(g)$curved <- 0
    E(g)[duplicated(el) | duplicated(el,fromLast =TRUE)]$curved <- curve
    (g)
}

plot(g, layout=layout.circle, edge.curved=.2)
plot(curve.reciprocal.edges(g), layout=layout.circle)
Другие вопросы по тегам