4

我想将下图中顶点 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 )

我得到的只是一个边缘,两端都有一个箭头。这应该很容易,但我在任何地方都没有找到它,也无法弄清楚。任何想法?

4

1 回答 1

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)
于 2018-05-17T12:04:18.980 回答