Home > Blockchain >  How to avoid the double arrows in igraph
How to avoid the double arrows in igraph

Time:10-18

With the following code

library(igraph)

actors <- data.frame(name=c("a","b","c","d","e","f","g","h"))
relations <- data.frame(from=c("a", "a", "b", "b",
                               "b", "c", "d","d",
                               "g","e","g","d"),
                        to  =c("d", "e", "c", "e", 
                               "g", "f", "f", "g",
                               "h","b","d","a"),
                        weight = c(14,30,25,3,5,6,4,13,2,6,10,10))
g <- graph_from_data_frame(relations, directed=TRUE, vertices=actors)
test.layout <- layout_(g,with_dh(weight.edge.lengths = edge_density(g)/1000))
plot(g,vertex.size=30,edge.arrow.size= 0.5,edge.label = relations$weight,
     layout = test.layout)

I produce the weighted directed graph enter image description here I would like to avoid the double arrows at the end of some edges. I would like to see, instead, two different edges (for example from d to a and from a to d).

CodePudding user response:

You did not set the random seed before generating your layout so I do not get exactly your layout. Nervertheless, you can get two separate edges, by using the edge.curved argument to igraph.plot.

ENDS = ends(g, E(g))
Curv = rep(F, nrow(ENDS))
for(i in 1:nrow(ENDS)) {
    Curv[i] = are.connected(g, ENDS[i,2], ENDS[i,1]) }

plot(g,vertex.size=30,edge.arrow.size=0.5,edge.label = relations$weight,
     layout = test.layout, edge.curved=Curv)

Graph with curved edges

  • Related