Многогранные ребра 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)